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