package postgres import ( "strings" "testing" "gitea.maximumdirect.net/ejr/weatherapi/internal/platform/constants" ) func TestQueriesUseParametersNotHardcodedValues(t *testing.T) { if !strings.Contains(queryCurrentConditionsSummary, "make_interval(mins => $1)") { t.Fatalf("current conditions summary query must use $1 minutes parameter") } if strings.Contains(queryCurrentConditionsSummary, "30 minutes") { t.Fatalf("current conditions summary query should not hardcode 30 minutes") } if !strings.Contains(queryCurrentConditionsSummary, "MAX(condition_code)") { t.Fatalf("current conditions summary query should compute max condition code") } if !strings.Contains(queryCurrentConditionsSummary, "ORDER BY observed_at DESC") || !strings.Contains(queryCurrentConditionsSummary, "LIMIT 1") { t.Fatalf("current conditions summary query should select latest is_day") } if !strings.Contains(queryRecentObservations, "LIMIT $1") { t.Fatalf("recent observations query must use parameterized limit") } if strings.Contains(queryRecentObservations, "LIMIT 5") { t.Fatalf("recent observations query should not hardcode limit=5") } if !strings.Contains(queryObservationPresentWeather, "event_id = ANY($1)") { t.Fatalf("observation present weather query must use parameterized event list") } if !strings.Contains(queryForecastPeriodsAt, "LIMIT $2") { t.Fatalf("forecast query must use parameterized limit") } if strings.Contains(queryForecastPeriodsAt, "LIMIT 5") { t.Fatalf("forecast query should not hardcode limit=5") } } func TestWindowMinutesUsesObservationWindowConstant(t *testing.T) { got := windowMinutes(constants.ObservationWindow) if got != 30 { t.Fatalf("expected 30 minutes from constants.ObservationWindow, got %d", got) } }