From 74772207a396d53bf361986c6aefbfe76dc0987c Mon Sep 17 00:00:00 2001 From: agessaman Date: Thu, 1 Oct 2026 16:03:11 -0700 Subject: [PATCH] test(characterization): pin _add_period_details over details text, observations and budgets Real NOAA forecast text rarely carries humidity, gusts or pressure, and never a precipitation probability in a phrasing the extractor matches, so the length check and several formats went unexercised. A matrix of five synthetic forecast texts, three observation dicts (none, full, falsy values), five current lengths and two budgets pins the output; goldens generated on the code before the next commit. --- .../golden/noaa_wx_period_details.json | 152 ++++++++++++++++++ .../test_noaa_weather_format.py | 29 ++++ 2 files changed, 181 insertions(+) create mode 100644 tests/characterization/golden/noaa_wx_period_details.json diff --git a/tests/characterization/golden/noaa_wx_period_details.json b/tests/characterization/golden/noaa_wx_period_details.json new file mode 100644 index 0000000..dd743db --- /dev/null +++ b/tests/characterization/golden/noaa_wx_period_details.json @@ -0,0 +1,152 @@ +[ + " | Today: ☀️Sunny 75° 45%RH 💧52° 👁️10mi", + " | Today: ☀️Sunny 75° 45%RH 💧52° 👁️10mi", + " | Today: ☀️Sunny 75° 45%RH 💧52° 👁️10mi", + " | Today: ☀️Sunny 75° 45%RH 💧52° 👁️10mi", + " | Today: ☀️Sunny 75° 45%RH 💧52°", + " | Today: ☀️Sunny 75° 45%RH 💧52° 👁️10mi", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 45%RH 💧52° 👁️10mi", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 45%RH 💧52° 👁️10mi", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 45%RH 💧52° 👁️10mi", + " | Today: ☀️Sunny 75° 45%RH 💧52° 👁️10mi", + " | Today: ☀️Sunny 75° 45%RH 💧52° 👁️10mi", + " | Today: ☀️Sunny 75° 45%RH 💧52° 👁️10mi", + " | Today: ☀️Sunny 75° 45%RH 💧52°", + " | Today: ☀️Sunny 75° 45%RH 💧52° 👁️10mi", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 45%RH 💧52° 👁️10mi", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 45%RH 💧52° 👁️10mi", + " | Today: ☀️Sunny 75° 📊1012hPa", + " | Today: ☀️Sunny 75° 📊1012hPa", + " | Today: ☀️Sunny 75° 📊1012hPa", + " | Today: ☀️Sunny 75° 📊1012hPa", + " | Today: ☀️Sunny 75° 📊1012hPa", + " | Today: ☀️Sunny 75° 📊1012hPa", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 📊1012hPa", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 📊1012hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 👁️10mi 📊1012hPa", + " | Today: ☀️Sunny 75° 👁️10mi 📊1012hPa", + " | Today: ☀️Sunny 75° 👁️10mi 📊1012hPa", + " | Today: ☀️Sunny 75° 👁️10mi 📊1012hPa", + " | Today: ☀️Sunny 75° 👁️10mi 📊1012hPa", + " | Today: ☀️Sunny 75° 👁️10mi 📊1012hPa", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 👁️10mi 📊1012hPa", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 👁️10mi 📊1012hPa", + " | Today: ☀️Sunny 75° 💨40", + " | Today: ☀️Sunny 75° 💨40", + " | Today: ☀️Sunny 75° 💨40", + " | Today: ☀️Sunny 75° 💨40", + " | Today: ☀️Sunny 75° 💨40", + " | Today: ☀️Sunny 75° 💨40", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 💨40", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 💨40", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 👁️10mi 💨40", + " | Today: ☀️Sunny 75° 👁️10mi 💨40", + " | Today: ☀️Sunny 75° 👁️10mi 💨40", + " | Today: ☀️Sunny 75° 👁️10mi 💨40", + " | Today: ☀️Sunny 75° 👁️10mi 💨40", + " | Today: ☀️Sunny 75° 👁️10mi 💨40", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 👁️10mi 💨40", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 👁️10mi 💨40", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 👁️10mi", + " | Today: ☀️Sunny 75° 👁️10mi", + " | Today: ☀️Sunny 75° 👁️10mi", + " | Today: ☀️Sunny 75° 👁️10mi", + " | Today: ☀️Sunny 75° 👁️10mi", + " | Today: ☀️Sunny 75° 👁️10mi", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 👁️10mi", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 👁️10mi", + " | Today: ☀️Sunny 75° 70%RH 🌦️40%", + " | Today: ☀️Sunny 75° 70%RH 🌦️40%", + " | Today: ☀️Sunny 75° 70%RH 🌦️40%", + " | Today: ☀️Sunny 75° 70%RH 🌦️40%", + " | Today: ☀️Sunny 75° 70%RH 🌦️40%", + " | Today: ☀️Sunny 75° 70%RH 🌦️40%", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 70%RH 🌦️40%", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 70%RH 🌦️40%", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 🌦️40% 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 🌦️40% 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 🌦️40% 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 🌦️40% 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 52%RH 💧48°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 🌦️40% 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 🌦️40% 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 52%RH 💧48° 👁️9mi 🌦️40% 💨18mph 📊1016hPa", + " | Today: ☀️Sunny 75° 70%RH 👁️10mi 🌦️40%", + " | Today: ☀️Sunny 75° 70%RH 👁️10mi 🌦️40%", + " | Today: ☀️Sunny 75° 70%RH 👁️10mi 🌦️40%", + " | Today: ☀️Sunny 75° 70%RH 👁️10mi 🌦️40%", + " | Today: ☀️Sunny 75° 70%RH 👁️10mi", + " | Today: ☀️Sunny 75° 70%RH 👁️10mi 🌦️40%", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 70%RH 👁️10mi 🌦️40%", + " | Today: ☀️Sunny 75°", + " | Today: ☀️Sunny 75° 70%RH 👁️10mi 🌦️40%" +] diff --git a/tests/characterization/test_noaa_weather_format.py b/tests/characterization/test_noaa_weather_format.py index 36bee46..20a2cc5 100644 --- a/tests/characterization/test_noaa_weather_format.py +++ b/tests/characterization/test_noaa_weather_format.py @@ -133,3 +133,32 @@ def test_noaa_forecast_text_with_long_forecasts(name): cmd.noaa_session, _ = _session(data, drop_periods=drop) results[f"drop{drop}-len{max_length}"] = cmd.get_noaa_weather(lat, lon, max_length=max_length)[0] assert_golden(f"noaa_wx_long_{name}", results) + + +DETAIL_TEXTS = [ + "Mostly sunny, with a high near 70. Humidity 45%. Dew point 52. Visibility 10 miles.", + "Showers likely. Chance of precipitation is 60%. Wind gusts as high as 25 mph. Pressure 1012 mb.", + "Rain. Chance of precipitation is 90%. Humidity around 88 percent. Gusts up to 40 mph.", + "Clear. Low around 40.", + "Cloudy with a 40% chance of rain. Humidity 70%. Wind gusts as high as 30 mph.", +] +OBSERVATIONS = [ + None, + {"humidity": 52, "dew_point": 48, "visibility": 9, "wind_gusts": "18mph", "pressure": 1016}, + {"humidity": 0, "dew_point": None, "visibility": 10}, +] + + +def test_add_period_details_matrix(): + cmd = _wx() + results = [] + for text in DETAIL_TEXTS: + for observation in OBSERVATIONS: + for length in (0, 40, 80, 100, 115): + for budget in (130, 200): + results.append( + cmd._add_period_details( + " | Today: ☀️Sunny 75°", text, length, max_length=budget, observation_data=observation + ) + ) + assert_golden("noaa_wx_period_details", results)