heater/pkg/device/settings_test.go
2022-10-28 19:20:04 +02:00

105 lines
2.3 KiB
Go

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())
}
})
}
}