83 lines
2.5 KiB
Go
83 lines
2.5 KiB
Go
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")),
|
|
Absence: models.Absence{},
|
|
}
|
|
|
|
func TestCalcRealWorkTime(t *testing.T) {
|
|
workTime := testWorkDay.CalcRealWorkTime(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.CalcRealWorkTime(testUser)
|
|
testWorkDay.CalcWorkPauseDiff(testUser)
|
|
testWorkDay.CalcOvertime(testUser)
|
|
workTime, pauseTime, overTime := testWorkDay.GetAllWorkTimes(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))
|
|
}
|
|
})
|
|
}
|
|
}
|