diff --git a/tariff/fixed/zone.go b/tariff/fixed/zone.go index 4b1dea8c4..7f68f1c03 100644 --- a/tariff/fixed/zone.go +++ b/tariff/fixed/zone.go @@ -47,10 +47,14 @@ func (r Zones) TimeTableMarkers() []HourMin { for _, z := range r { if !z.Hours.From.IsNil() { - res = append(res, z.Hours.From) + if !slices.Contains(res, z.Hours.From) { + res = append(res, z.Hours.From) + } } if !z.Hours.To.IsNil() { - res = append(res, z.Hours.To) + if !slices.Contains(res, z.Hours.To) { + res = append(res, z.Hours.To) + } } } diff --git a/tariff/fixed/zone_test.go b/tariff/fixed/zone_test.go index 867144132..72d325ea6 100644 --- a/tariff/fixed/zone_test.go +++ b/tariff/fixed/zone_test.go @@ -54,8 +54,12 @@ func TestZonesTimeTableMarkers(t *testing.T) { To: HourMin{2, 0}, }}, {Hours: TimeRange{ - From: HourMin{3, 30}, - To: HourMin{4, 30}, + 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}, }}, } @@ -63,14 +67,15 @@ func TestZonesTimeTableMarkers(t *testing.T) { {0, 0}, {1, 0}, {2, 0}, - {3, 0}, // 1hr intervals - {3, 30}, + {3, 0}, {4, 0}, // 1hr intervals {4, 30}, + {5, 0}, // 1hr intervals + {5, 30}, } // 1hr intervals - for hour := 5; hour < 24; hour++ { + for hour := 6; hour < 24; hour++ { expect = append(expect, HourMin{hour, 0}) } diff --git a/tariff/fixed_test.go b/tariff/fixed_test.go index cda0233ae..ae340855b 100644 --- a/tariff/fixed_test.go +++ b/tariff/fixed_test.go @@ -45,7 +45,7 @@ func TestFixedSplitZones(t *testing.T) { Price float64 Hours string }{ - {0.1, "0-5:30,21-0"}, + {0.1, "0-5:30,20-21,21-0"}, }, }) require.NoError(t, err) @@ -80,8 +80,8 @@ func TestFixedSplitZones(t *testing.T) { End: dayStart.Add(6 * time.Hour), }) - // 06:00-21:00 0.5 - for hour := 6; hour < 21; hour++ { + // 06:00-20:00 0.5 + for hour := 6; hour < 20; hour++ { expect = append(expect, api.Rate{ Value: 0.5, Start: dayStart.Add(time.Hour * time.Duration(hour)), @@ -89,8 +89,8 @@ func TestFixedSplitZones(t *testing.T) { }) } - // 21:00-00:00 0.1 - for hour := 21; hour < 24; hour++ { + // 20:00-21:00,21:00-00:00 0.1 + for hour := 20; hour < 24; hour++ { expect = append(expect, api.Rate{ Value: 0.1, Start: dayStart.Add(time.Hour * time.Duration(hour)),