Add a /conditions/current endpoint
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:
@@ -102,12 +102,73 @@ func TestMetricPassthroughAndNilHandling(t *testing.T) {
|
||||
if AlertsPayload(nil, UnitsUS) != nil {
|
||||
t.Fatalf("expected nil alerts input to return nil payload")
|
||||
}
|
||||
if CurrentConditionsPayload(nil, UnitsUS) != nil {
|
||||
t.Fatalf("expected nil current conditions input to return nil payload")
|
||||
}
|
||||
}
|
||||
|
||||
func TestCurrentConditionsPayloadMetricAndUS(t *testing.T) {
|
||||
conditions := &CurrentConditions{
|
||||
TemperatureC: float64Ptr(20),
|
||||
ApparentTemperatureC: float64Ptr(18),
|
||||
DewpointC: float64Ptr(10),
|
||||
RelativeHumidityPercent: float64Ptr(55),
|
||||
WindSpeedKmh: float64Ptr(100),
|
||||
WindDirectionDegrees: float64Ptr(225),
|
||||
ConditionCode: 0,
|
||||
IsDay: boolPtr(true),
|
||||
}
|
||||
|
||||
metricPayload := CurrentConditionsPayload(conditions, UnitsMetric)
|
||||
metric, ok := metricPayload.(CurrentConditionsResponse)
|
||||
if !ok {
|
||||
t.Fatalf("expected CurrentConditionsResponse metric payload, got %T", metricPayload)
|
||||
}
|
||||
assertApprox(t, metric.TemperatureC, 20, 0.0001)
|
||||
assertApprox(t, metric.WindSpeedKmh, 100, 0.0001)
|
||||
if metric.TemperatureF != nil || metric.WindSpeedMph != nil {
|
||||
t.Fatalf("expected US fields omitted for metric payload")
|
||||
}
|
||||
if metric.ConditionText != "Sunny" {
|
||||
t.Fatalf("expected condition text Sunny, got %q", metric.ConditionText)
|
||||
}
|
||||
|
||||
usPayload := CurrentConditionsPayload(conditions, UnitsUS)
|
||||
us, ok := usPayload.(CurrentConditionsResponse)
|
||||
if !ok {
|
||||
t.Fatalf("expected CurrentConditionsResponse US payload, got %T", usPayload)
|
||||
}
|
||||
assertApprox(t, us.TemperatureF, 68, 0.0001)
|
||||
assertApprox(t, us.WindSpeedMph, 62.1371192237, 0.0001)
|
||||
if us.TemperatureC != nil || us.WindSpeedKmh != nil {
|
||||
t.Fatalf("expected metric fields omitted for US payload")
|
||||
}
|
||||
}
|
||||
|
||||
func TestCurrentConditionsPayloadUsesNightConditionText(t *testing.T) {
|
||||
night := false
|
||||
payload := CurrentConditionsPayload(&CurrentConditions{
|
||||
ConditionCode: 0,
|
||||
IsDay: &night,
|
||||
}, UnitsMetric)
|
||||
|
||||
metric, ok := payload.(CurrentConditionsResponse)
|
||||
if !ok {
|
||||
t.Fatalf("expected CurrentConditionsResponse payload, got %T", payload)
|
||||
}
|
||||
if metric.ConditionText != "Clear" {
|
||||
t.Fatalf("expected condition text Clear, got %q", metric.ConditionText)
|
||||
}
|
||||
}
|
||||
|
||||
func float64Ptr(v float64) *float64 {
|
||||
return &v
|
||||
}
|
||||
|
||||
func boolPtr(v bool) *bool {
|
||||
return &v
|
||||
}
|
||||
|
||||
func assertApprox(t *testing.T, got *float64, want, eps float64) {
|
||||
t.Helper()
|
||||
if got == nil {
|
||||
|
||||
Reference in New Issue
Block a user