51 lines
1.5 KiB
Go
51 lines
1.5 KiB
Go
package mqttingest
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestLatestDailyRainUsesConfiguredTimezone(t *testing.T) {
|
|
loc, err := time.LoadLocation("Australia/Sydney")
|
|
if err != nil {
|
|
t.Fatalf("load location: %v", err)
|
|
}
|
|
|
|
l := NewLatest(loc)
|
|
|
|
// Crosses UTC midnight but remains the same local day in Sydney (UTC+11 during DST).
|
|
l.Update(time.Date(2026, time.January, 14, 22, 0, 0, 0, time.UTC), &WS90Payload{RainMM: 0})
|
|
l.Update(time.Date(2026, time.January, 14, 23, 30, 0, 0, time.UTC), &WS90Payload{RainMM: 2})
|
|
l.Update(time.Date(2026, time.January, 15, 0, 5, 0, 0, time.UTC), &WS90Payload{RainMM: 2})
|
|
|
|
snap, ok := l.Snapshot()
|
|
if !ok {
|
|
t.Fatal("expected snapshot")
|
|
}
|
|
if snap.DailyRainMM != 2 {
|
|
t.Fatalf("expected daily rain 2.0mm, got %.2fmm", snap.DailyRainMM)
|
|
}
|
|
}
|
|
|
|
func TestLatestDailyRainResetsAtConfiguredLocalMidnight(t *testing.T) {
|
|
loc, err := time.LoadLocation("Australia/Sydney")
|
|
if err != nil {
|
|
t.Fatalf("load location: %v", err)
|
|
}
|
|
|
|
l := NewLatest(loc)
|
|
|
|
// Crosses local midnight in Sydney (00:00 local == 13:00 UTC during DST).
|
|
l.Update(time.Date(2026, time.January, 15, 12, 30, 0, 0, time.UTC), &WS90Payload{RainMM: 0})
|
|
l.Update(time.Date(2026, time.January, 15, 12, 50, 0, 0, time.UTC), &WS90Payload{RainMM: 1})
|
|
l.Update(time.Date(2026, time.January, 15, 13, 10, 0, 0, time.UTC), &WS90Payload{RainMM: 1})
|
|
|
|
snap, ok := l.Snapshot()
|
|
if !ok {
|
|
t.Fatal("expected snapshot")
|
|
}
|
|
if snap.DailyRainMM != 0 {
|
|
t.Fatalf("expected daily rain reset after local midnight; got %.2fmm", snap.DailyRainMM)
|
|
}
|
|
}
|