Add first test and correct some bugs
This commit is contained in:
parent
6821828033
commit
b07e2829c6
24
pkg/device/device_test.go
Normal file
24
pkg/device/device_test.go
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package device
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
var goodDefaultDevice = Device {
|
||||||
|
Name: "valid",
|
||||||
|
Settings: DefaultDeviceSettings,
|
||||||
|
CurrentSetpoint: 0,
|
||||||
|
State: DeviceState{},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func TestStateTopic(t *testing.T) {
|
||||||
|
topic := goodDefaultDevice.StateTopic()
|
||||||
|
if topic != "heater/valid/state" {
|
||||||
|
t.Errorf("Got %s; want heater/valid/state", topic)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func TestCheckSetpoint(t *testing.T) {
|
||||||
|
}
|
@ -23,26 +23,24 @@ func (d DayOfWeek) Previous() DayOfWeek {
|
|||||||
return d-1
|
return d-1
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d DayOfWeek) DurationBetween(n DayOfWeek) time.Duration {
|
func (d DayOfWeek) DaysBetween(n DayOfWeek) int {
|
||||||
// return duration between two day of week
|
var between int
|
||||||
var duration time.Duration
|
if (n < d) {
|
||||||
if (d-n == 0) {
|
between = 7 - int(d-n)
|
||||||
duration, _ = time.ParseDuration("168h")
|
|
||||||
} else {
|
} else {
|
||||||
duration, _ = time.ParseDuration(fmt.Sprintf("%dh", (d-n)*24 ))
|
between = int(n-d)
|
||||||
}
|
}
|
||||||
return duration
|
return between
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Monday DayOfWeek = 0
|
Monday DayOfWeek = 0
|
||||||
Thuesday = 1
|
Thuesday DayOfWeek = 1
|
||||||
Wednesday = 2
|
Wednesday DayOfWeek = 2
|
||||||
Thursday = 3
|
Thursday DayOfWeek = 3
|
||||||
Friday = 4
|
Friday DayOfWeek = 4
|
||||||
Saturday = 5
|
Saturday DayOfWeek = 5
|
||||||
Sunday = 6
|
Sunday DayOfWeek = 6
|
||||||
)
|
)
|
||||||
|
|
||||||
func WeekDayEnToFr(weekday time.Weekday) DayOfWeek {
|
func WeekDayEnToFr(weekday time.Weekday) DayOfWeek {
|
||||||
@ -77,6 +75,8 @@ type Setpoint struct {
|
|||||||
Preset_id int `json:"preset_id"`
|
Preset_id int `json:"preset_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
type WeekProgram map[DayOfWeek][]Setpoint
|
type WeekProgram map[DayOfWeek][]Setpoint
|
||||||
|
|
||||||
func (p WeekProgram) Current() Setpoint {
|
func (p WeekProgram) Current() Setpoint {
|
||||||
@ -119,8 +119,9 @@ func (p WeekProgram) NextTime(t time.Time) (time.Time, error) {
|
|||||||
setpoint = get(weekday, daytime)
|
setpoint = get(weekday, daytime)
|
||||||
if (setpoint != Setpoint{}) {
|
if (setpoint != Setpoint{}) {
|
||||||
// setpoint found, compute time
|
// setpoint found, compute time
|
||||||
next := t.Add( startweekday.DurationBetween(weekday) )
|
next := time.Date(t.Year(), t.Month(), t.Day() + startweekday.DaysBetween(weekday), 0, 0, 0, 0, time.Local)
|
||||||
next = t.Add( time.Duration(setpoint.Start - daytime ) * time.Minute )
|
|
||||||
|
next = next.Add(time.Duration( (setpoint.Start) * int(time.Minute) ))
|
||||||
return next, nil
|
return next, nil
|
||||||
}
|
}
|
||||||
weekday = weekday.Next()
|
weekday = weekday.Next()
|
||||||
@ -204,3 +205,45 @@ type DeviceSettings struct {
|
|||||||
Presets []Preset `json:"presets"`
|
Presets []Preset `json:"presets"`
|
||||||
TVR TVRSettings `json:"TVR"`
|
TVR TVRSettings `json:"TVR"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////
|
||||||
|
// Defaults
|
||||||
|
|
||||||
|
var DefaultPresets = []Preset{
|
||||||
|
{Label: "default", Value: 17, Color: "#012a36"},
|
||||||
|
{Label: "normal", Value: 19, Color: "#b6244f"},
|
||||||
|
}
|
||||||
|
|
||||||
|
var 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},
|
||||||
|
}
|
||||||
|
|
||||||
|
var DefaultWeekProgram = WeekProgram{
|
||||||
|
Monday: defaultSetpoints,
|
||||||
|
Thuesday: defaultSetpoints,
|
||||||
|
Wednesday: defaultSetpoints,
|
||||||
|
Thursday : defaultSetpoints,
|
||||||
|
Friday: defaultSetpoints,
|
||||||
|
Saturday: defaultSetpoints,
|
||||||
|
Sunday: defaultSetpoints,
|
||||||
|
}
|
||||||
|
|
||||||
|
var DefaultPrograms = Programs{
|
||||||
|
"default": DefaultWeekProgram,
|
||||||
|
}
|
||||||
|
|
||||||
|
var DefaultTVRSettings = TVRSettings {
|
||||||
|
Setpoint_topic : "zigbee2mqtt/TVR/{{.Device}}/set",
|
||||||
|
Setpoint_payload : "{\"current_heating_setpoint\": {{.Setpoint}}}",
|
||||||
|
Setpoint_state_topic : "zigbee2mqtt/TVR/{{.Device}}",
|
||||||
|
Setpoint_state_jp : "$.current_heating_setpoint",
|
||||||
|
}
|
||||||
|
|
||||||
|
var DefaultDeviceSettings = DeviceSettings{
|
||||||
|
Programs: DefaultPrograms,
|
||||||
|
Presets: DefaultPresets,
|
||||||
|
TVR: DefaultTVRSettings,
|
||||||
|
}
|
||||||
|
82
pkg/device/settings_test.go
Normal file
82
pkg/device/settings_test.go
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
package device
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
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},
|
||||||
|
}
|
||||||
|
|
||||||
|
program := WeekProgram{
|
||||||
|
Monday: defaultSetpoints,
|
||||||
|
Thuesday: defaultSetpoints,
|
||||||
|
Wednesday: defaultSetpoints,
|
||||||
|
Thursday : defaultSetpoints,
|
||||||
|
Friday: defaultSetpoints,
|
||||||
|
Saturday: defaultSetpoints,
|
||||||
|
Sunday: defaultSetpoints,
|
||||||
|
}
|
||||||
|
|
||||||
|
var tests = []struct{
|
||||||
|
time time.Time
|
||||||
|
want time.Time
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
time.Date(2022, time.October, 23, 9, 0, 0, 0, time.Local),
|
||||||
|
time.Date(2022, time.October, 23, 16, 0, 0, 0, time.Local),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
time.Date(2022, time.October, 24, 5, 0, 0, 0, time.Local),
|
||||||
|
time.Date(2022, time.October, 24, 7, 0, 0, 0, time.Local),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
time.Date(2022, time.October, 23, 23, 0, 0, 0, time.Local),
|
||||||
|
time.Date(2022, time.October, 24, 7, 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 := program.NextTime(tt.time)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected error")
|
||||||
|
}
|
||||||
|
if !next.Equal(tt.want) {
|
||||||
|
t.Errorf("got %s, want %s", next.String(), tt.want.String())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user