Tariffs: fix zones creating duplicate entries (#21439)

This commit is contained in:
andig 2025-05-25 11:32:10 +02:00 • committed by GitHub
parent 2476dd7b9c
commit 2e6756f7b2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 21 additions and 12 deletions

View file

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

View file

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

View file

@ -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)),