package device import ( "fmt" "testing" "time" ) func TestDaysBetween(t *testing.T) { var tests = []struct { day1 DayOfWeek day2 DayOfWeek want int }{ {Monday, Thuesday, 1}, {Thuesday, Monday, 6}, {Sunday, Monday, 1}, {Sunday, Thuesday, 2}, {Friday, Friday, 0}, } for _, tt := range tests { testname := fmt.Sprintf("Days between %d and %d", tt.day1, tt.day2) t.Run(testname, func(t *testing.T) { between := tt.day1.DaysBetween(tt.day2) if between != tt.want { t.Errorf("got %d, want %d", between, tt.want) } }) } } func TestNextTime(t *testing.T) { defaultSetpoints := []Setpoint{ {Start: 7 * 60, Preset_id: 1}, {Start: 8 * 60, Preset_id: 0}, {Start: 16 * 60, Preset_id: 1}, {Start: 22 * 60, Preset_id: 0}, } zeroSetpoints := []Setpoint{ {Start: 0, Preset_id: 0}, } default_program := WeekProgram{ Monday: defaultSetpoints, Thuesday: defaultSetpoints, Wednesday: defaultSetpoints, Thursday: defaultSetpoints, Friday: defaultSetpoints, Saturday: defaultSetpoints, Sunday: defaultSetpoints, } zero_program := WeekProgram{ Monday: zeroSetpoints, Thuesday: zeroSetpoints, Wednesday: zeroSetpoints, Thursday: zeroSetpoints, Friday: zeroSetpoints, Saturday: zeroSetpoints, Sunday: zeroSetpoints, } var tests = []struct { prog WeekProgram time time.Time want time.Time }{ { default_program, time.Date(2022, time.October, 23, 9, 0, 0, 0, time.Local), time.Date(2022, time.October, 23, 16, 0, 0, 0, time.Local), }, { default_program, time.Date(2022, time.October, 24, 5, 0, 0, 0, time.Local), time.Date(2022, time.October, 24, 7, 0, 0, 0, time.Local), }, { default_program, time.Date(2022, time.October, 23, 23, 0, 0, 0, time.Local), time.Date(2022, time.October, 24, 7, 0, 0, 0, time.Local), }, { zero_program, time.Date(2022, time.October, 23, 23, 0, 0, 0, time.Local), time.Date(2022, time.October, 24, 0, 0, 0, 0, time.Local), }, } for _, tt := range tests { testname := fmt.Sprintf("%s", tt.time.String()) t.Run(testname, func(t *testing.T) { next, err := tt.prog.NextTime(tt.time) if err != nil { t.Fatalf(err.Error()) } if !next.Equal(tt.want) { t.Errorf("got %s, want %s", next.String(), tt.want.String()) } }) } }