71 lines
2.3 KiB
Go
71 lines
2.3 KiB
Go
package util
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
basedomain "wucher/internal/domain/base"
|
|
)
|
|
|
|
func TestResolveShiftWindowUsesOperationalShiftWithinDateRange(t *testing.T) {
|
|
base := &basedomain.Base{
|
|
DefaultStartTimeType: basedomain.ShiftTimeTypeFixed,
|
|
DefaultEndTimeType: basedomain.ShiftTimeTypeFixed,
|
|
DefaultShiftStart: "09:00",
|
|
DefaultShiftEnd: "21:00",
|
|
OperationalShiftTimes: []basedomain.BaseOperationalShiftTime{
|
|
{
|
|
DateStart: timePtr(time.Date(2026, time.June, 1, 0, 0, 0, 0, time.UTC)),
|
|
DateEnd: timePtr(time.Date(2026, time.June, 30, 0, 0, 0, 0, time.UTC)),
|
|
StartTimeType: basedomain.ShiftTimeTypeFixed,
|
|
EndTimeType: basedomain.ShiftTimeTypeFixed,
|
|
ShiftStart: "10:00",
|
|
ShiftEnd: "22:00",
|
|
},
|
|
},
|
|
}
|
|
|
|
start, end, err := ResolveShiftWindow(base, time.Date(2026, time.June, 15, 0, 0, 0, 0, time.UTC))
|
|
if err != nil {
|
|
t.Fatalf("ResolveShiftWindow returned error: %v", err)
|
|
}
|
|
if start != "10:00" || end != "22:00" {
|
|
t.Fatalf("expected operational shift 10:00-22:00, got %s-%s", start, end)
|
|
}
|
|
|
|
start, end, err = ResolveShiftWindow(base, time.Date(2026, time.July, 1, 0, 0, 0, 0, time.UTC))
|
|
if err != nil {
|
|
t.Fatalf("ResolveShiftWindow returned error: %v", err)
|
|
}
|
|
if start != "09:00" || end != "21:00" {
|
|
t.Fatalf("expected default shift 09:00-21:00, got %s-%s", start, end)
|
|
}
|
|
}
|
|
|
|
func TestPickShiftForDatePreservesCalendarDateFromLocalTimezone(t *testing.T) {
|
|
jakarta := time.FixedZone("UTC+7", 7*60*60)
|
|
shift := basedomain.BaseOperationalShiftTime{
|
|
DateStart: timePtr(time.Date(2026, time.June, 1, 0, 0, 0, 0, jakarta)),
|
|
DateEnd: timePtr(time.Date(2026, time.June, 30, 0, 0, 0, 0, jakarta)),
|
|
StartTimeType: basedomain.ShiftTimeTypeFixed,
|
|
EndTimeType: basedomain.ShiftTimeTypeFixed,
|
|
ShiftStart: "10:00",
|
|
ShiftEnd: "22:00",
|
|
}
|
|
base := &basedomain.Base{
|
|
OperationalShiftTimes: []basedomain.BaseOperationalShiftTime{shift},
|
|
}
|
|
|
|
picked := PickShiftForDate(base, time.Date(2026, time.June, 1, 0, 0, 0, 0, time.UTC))
|
|
if picked == nil {
|
|
t.Fatalf("expected operational shift to match calendar date from local timezone")
|
|
}
|
|
if picked.ShiftStart != "10:00" || picked.ShiftEnd != "22:00" {
|
|
t.Fatalf("unexpected picked shift %s-%s", picked.ShiftStart, picked.ShiftEnd)
|
|
}
|
|
}
|
|
|
|
func timePtr(v time.Time) *time.Time {
|
|
return &v
|
|
}
|