package models_test import ( "arbeitszeitmessung/helper" "arbeitszeitmessung/models" "log" "testing" "time" ) func CatchError[T any](val T, err error) T { if err != nil { log.Fatalln(err) } return val } var testWorkDay = models.WorkDay{ Day: CatchError(time.Parse("2006-01-02", "2025-01-01")), Bookings: testBookings8hrs, TimeFrom: CatchError(time.Parse("2006-01-02 15:04", "2025-01-01 08:00")), TimeTo: CatchError(time.Parse("2006-01-02 15:04", "2025-01-01 16:30")), } func TestCalcRealWorkTime(t *testing.T) { workTime := testWorkDay.TimeWorkReal(testUser) if workTime != time.Hour*8 { t.Errorf("Calc Worktime Default not working, time should be 8h, but was %s", helper.FormatDuration(workTime)) } } func TestCalcWorkPauseDiff(t *testing.T) { type testCase struct { Name string bookings []models.Booking expectedWorkTime time.Duration expectedPauseTime time.Duration expectedOvertime time.Duration } testCases := []testCase{testCase{ Name: "6hrs no pause", bookings: testBookings6hrs, expectedWorkTime: 6 * time.Hour, expectedPauseTime: 0, expectedOvertime: -2 * time.Hour, }, testCase{ Name: "8hrs - 30min pause", bookings: testBookings8hrs, expectedWorkTime: 7*time.Hour + 30*time.Minute, expectedPauseTime: 30 * time.Minute, expectedOvertime: -30 * time.Minute, }, testCase{ Name: "10hrs - 45min pause", bookings: testBookings10hrs, expectedWorkTime: 9*time.Hour + 15*time.Minute, expectedPauseTime: 45 * time.Minute, expectedOvertime: 1*time.Hour + 15*time.Minute, }} for _, test := range testCases { t.Run(test.Name, func(t *testing.T) { testWorkDay.Bookings = test.bookings testWorkDay.TimeWorkReal(testUser) testWorkDay.TimePauseReal(testUser) testWorkDay.TimeOvertimeReal(testUser) workTime, pauseTime, overTime := testWorkDay.GetAllWorkTimesReal(testUser) if workTime != test.expectedWorkTime { t.Errorf("Calculated wrong workTime: should be %s, but was %s", helper.FormatDuration(test.expectedWorkTime), helper.FormatDuration(workTime)) } if pauseTime != test.expectedPauseTime { t.Errorf("Calculated wrong pauseTime: should be %s, but was %s", helper.FormatDuration(test.expectedPauseTime), helper.FormatDuration(pauseTime)) } if overTime != test.expectedOvertime { t.Errorf("Calculated wrong overtime: should be %s, but was %s", helper.FormatDuration(test.expectedOvertime), helper.FormatDuration(overTime)) } }) } }