Simplified the forecast schema and removed fields deprecated upstream in weatherfeeder
All checks were successful
ci/woodpecker/push/build-image Pipeline was successful
All checks were successful
ci/woodpecker/push/build-image Pipeline was successful
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
package presenter
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"math"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -83,6 +84,22 @@ func TestForecastPayloadUS(t *testing.T) {
|
||||
assertApprox(t, period.SnowfallDepthIn, 2.0, 0.0001)
|
||||
}
|
||||
|
||||
func TestForecastPayloadOmitsLegacyDescriptionFields(t *testing.T) {
|
||||
run := &model.WeatherForecastRun{
|
||||
Product: model.ForecastProductHourly,
|
||||
IssuedAt: time.Date(2026, 3, 20, 12, 0, 0, 0, time.UTC),
|
||||
Periods: []model.WeatherForecastPeriod{{
|
||||
StartTime: time.Date(2026, 3, 20, 12, 0, 0, 0, time.UTC),
|
||||
EndTime: time.Date(2026, 3, 20, 13, 0, 0, 0, time.UTC),
|
||||
ConditionCode: model.WMOUnknown,
|
||||
TextDescription: "Cloudy",
|
||||
}},
|
||||
}
|
||||
|
||||
assertForecastPayloadHasNoLegacyDescriptionFields(t, ForecastPayload(run, UnitsMetric, 0, nil))
|
||||
assertForecastPayloadHasNoLegacyDescriptionFields(t, ForecastPayload(run, UnitsUS, 0, nil))
|
||||
}
|
||||
|
||||
func TestForecastPayloadTimezoneConversionMetricAndUS(t *testing.T) {
|
||||
loc := time.FixedZone("UTC-05:00", -5*60*60)
|
||||
issuedAt := time.Date(2026, 7, 10, 12, 0, 0, 0, time.UTC)
|
||||
@@ -308,3 +325,34 @@ func assertOffsetSeconds(t *testing.T, ts time.Time, want int) {
|
||||
t.Fatalf("expected offset %d, got %d for %s", want, got, ts.Format(time.RFC3339))
|
||||
}
|
||||
}
|
||||
|
||||
func assertForecastPayloadHasNoLegacyDescriptionFields(t *testing.T, payload any) {
|
||||
t.Helper()
|
||||
|
||||
b, err := json.Marshal(payload)
|
||||
if err != nil {
|
||||
t.Fatalf("json.Marshal(payload) error = %v", err)
|
||||
}
|
||||
|
||||
var root map[string]any
|
||||
if err := json.Unmarshal(b, &root); err != nil {
|
||||
t.Fatalf("json.Unmarshal(payload) error = %v", err)
|
||||
}
|
||||
periodsRaw, ok := root["periods"].([]any)
|
||||
if !ok || len(periodsRaw) == 0 {
|
||||
t.Fatalf("expected non-empty periods in payload: %#v", root["periods"])
|
||||
}
|
||||
period, ok := periodsRaw[0].(map[string]any)
|
||||
if !ok {
|
||||
t.Fatalf("expected first period map, got %#v", periodsRaw[0])
|
||||
}
|
||||
|
||||
for _, key := range []string{"conditionText", "providerRawDescription", "detailedText", "iconUrl"} {
|
||||
if _, exists := period[key]; exists {
|
||||
t.Fatalf("unexpected legacy field %q in payload period: %#v", key, period)
|
||||
}
|
||||
}
|
||||
if period["textDescription"] != "Cloudy" {
|
||||
t.Fatalf("expected textDescription Cloudy, got %#v", period["textDescription"])
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user