118 lines
2.9 KiB
Go
118 lines
2.9 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())
|
|
}
|
|
|
|
func TestZonesTimeTableMarkersUnsorted(t *testing.T) {
|
|
// price and charges zones are concatenated unsorted, see Fixed.Rates
|
|
zones := Zones{
|
|
{Hours: TimeRange{
|
|
From: HourMin{12, 0},
|
|
To: HourMin{14, 0},
|
|
}},
|
|
{Hours: TimeRange{
|
|
From: HourMin{10, 15}, // minutes must not sort before the earlier hour's 9:45
|
|
To: HourMin{11, 0},
|
|
}},
|
|
{Hours: TimeRange{
|
|
From: HourMin{9, 45},
|
|
To: HourMin{10, 0},
|
|
}},
|
|
{Hours: TimeRange{
|
|
From: HourMin{0, 0},
|
|
To: HourMin{5, 30},
|
|
}},
|
|
}
|
|
|
|
expect := []HourMin{{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {5, 30}}
|
|
for hour := 6; hour < 24; hour++ {
|
|
expect = append(expect, HourMin{hour, 0})
|
|
switch hour {
|
|
case 9:
|
|
expect = append(expect, HourMin{9, 45})
|
|
case 10:
|
|
expect = append(expect, HourMin{10, 15})
|
|
}
|
|
}
|
|
|
|
assert.Equal(t, expect, zones.TimeTableMarkers())
|
|
}
|