Made forecast-period conditionCode optional

This commit is contained in:
2026-05-28 07:46:57 -05:00
parent 6ea27cb2c5
commit 626df6bfc1
9 changed files with 111 additions and 60 deletions

View File

@@ -334,7 +334,7 @@ func TestForecastUSUnitsWithXMLFormatUppercaseQuery(t *testing.T) {
Periods: []model.WeatherForecastPeriod{{
StartTime: time.Now().UTC(),
EndTime: time.Now().UTC().Add(time.Hour),
ConditionCode: 1,
ConditionCode: wmoCodePtr(1),
TemperatureC: float64Ptr(10),
}},
},
@@ -367,7 +367,7 @@ func TestForecastPrecisionTwo(t *testing.T) {
Periods: []model.WeatherForecastPeriod{{
StartTime: time.Now().UTC(),
EndTime: time.Now().UTC().Add(time.Hour),
ConditionCode: model.WMOUnknown,
ConditionCode: wmoCodePtr(model.WMOUnknown),
TemperatureC: float64Ptr(12.345),
}},
},
@@ -412,7 +412,7 @@ func TestForecastJSONOmitsLegacyDescriptionFields(t *testing.T) {
Periods: []model.WeatherForecastPeriod{{
StartTime: time.Now().UTC(),
EndTime: time.Now().UTC().Add(time.Hour),
ConditionCode: model.WMOUnknown,
ConditionCode: wmoCodePtr(model.WMOUnknown),
TextDescription: "Cloudy",
}},
},
@@ -463,7 +463,7 @@ func TestForecastTimezoneOffsetUppercaseTZConvertsAllTimes(t *testing.T) {
Periods: []model.WeatherForecastPeriod{{
StartTime: periodStart,
EndTime: periodEnd,
ConditionCode: model.WMOUnknown,
ConditionCode: wmoCodePtr(model.WMOUnknown),
}},
},
}, "/forecast/hourly")
@@ -498,7 +498,7 @@ func TestForecastTimezoneAbbreviationCDT(t *testing.T) {
Periods: []model.WeatherForecastPeriod{{
StartTime: issuedAt,
EndTime: issuedAt.Add(time.Hour),
ConditionCode: model.WMOUnknown,
ConditionCode: wmoCodePtr(model.WMOUnknown),
}},
},
}, "/forecast/hourly")
@@ -525,7 +525,7 @@ func TestForecastTimezoneCityAliasChicago(t *testing.T) {
Periods: []model.WeatherForecastPeriod{{
StartTime: issuedAt,
EndTime: issuedAt.Add(time.Hour),
ConditionCode: model.WMOUnknown,
ConditionCode: wmoCodePtr(model.WMOUnknown),
}},
},
}, "/forecast/hourly")
@@ -587,9 +587,9 @@ func TestForecastHourlyTodayFiltersByStartDateUTCDefault(t *testing.T) {
Product: model.ForecastProductHourly,
IssuedAt: time.Date(2026, 7, 10, 11, 0, 0, 0, time.UTC),
Periods: []model.WeatherForecastPeriod{
{StartTime: time.Date(2026, 7, 10, 0, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 10, 1, 30, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 10, 23, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 0, 0, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 11, 2, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 3, 0, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 10, 0, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 10, 1, 30, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
{StartTime: time.Date(2026, 7, 10, 23, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 0, 0, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
{StartTime: time.Date(2026, 7, 11, 2, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 3, 0, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
},
},
}, "/forecast/hourly/today")
@@ -622,9 +622,9 @@ func TestForecastHourlyTomorrowFiltersByStartDateUTCDefault(t *testing.T) {
Product: model.ForecastProductHourly,
IssuedAt: time.Date(2026, 7, 10, 11, 0, 0, 0, time.UTC),
Periods: []model.WeatherForecastPeriod{
{StartTime: time.Date(2026, 7, 10, 23, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 0, 0, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 11, 0, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 1, 0, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 11, 15, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 16, 0, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 10, 23, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 0, 0, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
{StartTime: time.Date(2026, 7, 11, 0, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 1, 0, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
{StartTime: time.Date(2026, 7, 11, 15, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 16, 0, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
},
},
}, "/forecast/hourly/tomorrow")
@@ -657,9 +657,9 @@ func TestForecastHourlyTodayTimezoneAffectsDaySlice(t *testing.T) {
Product: model.ForecastProductHourly,
IssuedAt: time.Date(2026, 7, 10, 11, 0, 0, 0, time.UTC),
Periods: []model.WeatherForecastPeriod{
{StartTime: time.Date(2026, 7, 10, 4, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 10, 5, 30, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 11, 3, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 4, 30, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 11, 5, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 6, 30, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 10, 4, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 10, 5, 30, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
{StartTime: time.Date(2026, 7, 11, 3, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 4, 30, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
{StartTime: time.Date(2026, 7, 11, 5, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 6, 30, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
},
},
}, "/forecast/hourly/today")
@@ -690,8 +690,8 @@ func TestForecastHourlyTomorrowTimezoneAffectsDaySlice(t *testing.T) {
Product: model.ForecastProductHourly,
IssuedAt: time.Date(2026, 7, 10, 11, 0, 0, 0, time.UTC),
Periods: []model.WeatherForecastPeriod{
{StartTime: time.Date(2026, 7, 11, 3, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 4, 30, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 11, 5, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 6, 30, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 11, 3, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 4, 30, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
{StartTime: time.Date(2026, 7, 11, 5, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 6, 30, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
},
},
}, "/forecast/hourly/tomorrow")
@@ -724,7 +724,7 @@ func TestForecastHourlyTodaySupportsSameFlags(t *testing.T) {
Periods: []model.WeatherForecastPeriod{{
StartTime: time.Date(2026, 7, 10, 13, 0, 0, 0, time.UTC),
EndTime: time.Date(2026, 7, 10, 14, 0, 0, 0, time.UTC),
ConditionCode: 1,
ConditionCode: wmoCodePtr(1),
TemperatureC: float64Ptr(10.123),
}},
},
@@ -755,7 +755,7 @@ func TestForecastHourlyTomorrowSupportsSameFlags(t *testing.T) {
Periods: []model.WeatherForecastPeriod{{
StartTime: time.Date(2026, 7, 11, 13, 0, 0, 0, time.UTC),
EndTime: time.Date(2026, 7, 11, 14, 0, 0, 0, time.UTC),
ConditionCode: 1,
ConditionCode: wmoCodePtr(1),
TemperatureC: float64Ptr(10.123),
}},
},
@@ -835,7 +835,7 @@ func TestForecastHourlyTodayNoMatchingPeriodsReturnsDataWithEmptyPeriods(t *test
Periods: []model.WeatherForecastPeriod{{
StartTime: time.Date(2026, 7, 11, 13, 0, 0, 0, time.UTC),
EndTime: time.Date(2026, 7, 11, 14, 0, 0, 0, time.UTC),
ConditionCode: model.WMOUnknown,
ConditionCode: wmoCodePtr(model.WMOUnknown),
}},
},
}, "/forecast/hourly/today")
@@ -888,7 +888,7 @@ func TestForecastNarrativePopulatedJSONEnvelope(t *testing.T) {
StartTime: time.Now().UTC(),
EndTime: time.Now().UTC().Add(12 * time.Hour),
Name: "Tonight",
ConditionCode: model.WMOUnknown,
ConditionCode: wmoCodePtr(model.WMOUnknown),
TextDescription: "Mostly clear overnight.",
}},
},
@@ -952,7 +952,7 @@ func TestForecastNarrativeSupportsSameFlags(t *testing.T) {
Periods: []model.WeatherForecastPeriod{{
StartTime: time.Date(2026, 7, 10, 13, 0, 0, 0, time.UTC),
EndTime: time.Date(2026, 7, 11, 1, 0, 0, 0, time.UTC),
ConditionCode: 1,
ConditionCode: wmoCodePtr(1),
TemperatureC: float64Ptr(20.123),
}},
},
@@ -1012,9 +1012,9 @@ func TestForecastNarrativeTodayTimezoneAffectsDaySlice(t *testing.T) {
Product: model.ForecastProductNarrative,
IssuedAt: time.Date(2026, 7, 10, 11, 0, 0, 0, time.UTC),
Periods: []model.WeatherForecastPeriod{
{StartTime: time.Date(2026, 7, 10, 4, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 10, 5, 30, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 11, 3, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 15, 30, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 11, 5, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 17, 30, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 10, 4, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 10, 5, 30, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
{StartTime: time.Date(2026, 7, 11, 3, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 15, 30, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
{StartTime: time.Date(2026, 7, 11, 5, 30, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 17, 30, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
},
},
}, "/forecast/narrative/today")
@@ -1045,9 +1045,9 @@ func TestForecastNarrativeTomorrowFiltersByStartDateUTCDefault(t *testing.T) {
Product: model.ForecastProductNarrative,
IssuedAt: time.Date(2026, 7, 10, 11, 0, 0, 0, time.UTC),
Periods: []model.WeatherForecastPeriod{
{StartTime: time.Date(2026, 7, 10, 23, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 11, 0, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 11, 0, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 12, 0, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 11, 12, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 12, 0, 0, 0, 0, time.UTC), ConditionCode: model.WMOUnknown},
{StartTime: time.Date(2026, 7, 10, 23, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 11, 0, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
{StartTime: time.Date(2026, 7, 11, 0, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 11, 12, 0, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
{StartTime: time.Date(2026, 7, 11, 12, 0, 0, 0, time.UTC), EndTime: time.Date(2026, 7, 12, 0, 0, 0, 0, time.UTC), ConditionCode: wmoCodePtr(model.WMOUnknown)},
},
},
}, "/forecast/narrative/tomorrow")
@@ -1806,6 +1806,11 @@ func float64Ptr(v float64) *float64 {
return &v
}
func wmoCodePtr(v model.WMOCode) *model.WMOCode {
out := v
return &out
}
type forecastTimePayload struct {
Data struct {
IssuedAt time.Time `json:"issuedAt"`