evcc-io/tariff/fixed/zone_test.go

83 lines
2.1 KiB
Go

package fixed
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestZonesForDay(t *testing.T) {
zones := Zones{
{Days: nil},
{Days: []Day{Monday, Tuesday, Wednesday}},
{Days: []Day{Wednesday, Thursday, Friday}},
}
assert.Len(t, zones.ForDayAndMonth(Sunday, April), 1)
assert.Len(t, zones.ForDayAndMonth(Monday, April), 2)
assert.Len(t, zones.ForDayAndMonth(Wednesday, April), 3)
assert.Len(t, zones.ForDayAndMonth(Thursday, April), 2)
}
func TestZonesForDayAndMonth(t *testing.T) {
zones := Zones{
{Days: nil, Months: nil}, // Applies to all days and months
{Days: []Day{Monday, Tuesday, Wednesday}, Months: []Month{January, February, March, April}},
{Days: []Day{Wednesday, Thursday, Friday}, Months: []Month{April, May, June}},
}
// Test for specific day and month combinations
assert.Len(t, zones.ForDayAndMonth(Sunday, April), 1)
assert.Len(t, zones.ForDayAndMonth(Monday, January), 2)
assert.Len(t, zones.ForDayAndMonth(Wednesday, April), 3)
assert.Len(t, zones.ForDayAndMonth(Thursday, May), 2)
assert.Len(t, zones.ForDayAndMonth(Saturday, July), 1)
}
func TestZonesForMonth(t *testing.T) {
zones := Zones{
{Months: nil},
{Months: []Month{January, February, March, April}},
{Months: []Month{April, May, June}},
}
// Test for specific months
assert.Len(t, zones.ForDayAndMonth(Sunday, January), 2)
assert.Len(t, zones.ForDayAndMonth(Sunday, April), 3)
assert.Len(t, zones.ForDayAndMonth(Sunday, July), 1)
}
func TestZonesTimeTableMarkers(t *testing.T) {
zones := Zones{
{Hours: TimeRange{
From: HourMin{1, 0},
To: HourMin{2, 0},
}},
{Hours: TimeRange{
From: HourMin{2, 0}, // make sure adjacent zones don't generate duplicate markers
To: HourMin{3, 0},
}},
{Hours: TimeRange{
From: HourMin{4, 30},
To: HourMin{5, 30},
}},
}
expect := []HourMin{
{0, 0},
{1, 0},
{2, 0},
{3, 0},
{4, 0}, // 1hr intervals
{4, 30},
{5, 0}, // 1hr intervals
{5, 30},
}
// 1hr intervals
for hour := 6; hour < 24; hour++ {
expect = append(expect, HourMin{hour, 0})
}
assert.Equal(t, expect, zones.TimeTableMarkers())
}