Files
loogle-scripts/services/telegram-bot/test_hourly_table_show.py
T
2026-08-21 11:57:29 +02:00

87 lines
2.5 KiB
Python

#!/usr/bin/env python3
"""Regressione visibilità ore nella tabella meteo 48h."""
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))
from open_meteo_precip import (
apply_hourly_daily_precip,
hourly_table_should_show,
overlay_icon_precip_on_hourly,
)
def test_first_24h_all_shown():
for h in range(24):
assert hourly_table_should_show(h, 0.0, 3) is True
def test_second_day_even_hours_shown():
assert hourly_table_should_show(24, 0.0, 3) is True # lun 08
assert hourly_table_should_show(32, 5.0, 63) is True # lun 16
def test_second_day_odd_dry_hidden():
assert hourly_table_should_show(31, 0.0, 3) is False # lun 15 secco
def test_second_day_odd_wet_shown():
# Caso reale 17/08/2026: 15:00 = 17.4 mm (code 65) era nascosto → 48h mostrava solo 5 mm alle 16
assert hourly_table_should_show(31, 17.4, 65) is True
assert hourly_table_should_show(31, 0.0, 65) is True # codice precip anche con mm 0
def test_apply_hourly_daily_precip_matches_hours():
hourly = {
"time": [f"2026-08-17T{h:02d}:00" for h in range(24)],
"precipitation": [0.0] * 24,
"rain": [0.0] * 24,
"showers": [0.0] * 24,
"snowfall": [0.0] * 24,
}
hourly["rain"][15] = 17.4
hourly["rain"][16] = 5.0
hourly["precipitation"][15] = 17.4
hourly["precipitation"][16] = 5.0
daily = {
"time": ["2026-08-17"],
"precipitation_sum": [18.0],
"rain_sum": [18.0],
"showers_sum": [20.0],
"snowfall_sum": [0.0],
}
out = apply_hourly_daily_precip(daily, hourly)
assert out["precipitation_sum"][0] == 22.4
assert out["rain_sum"][0] == 22.4
assert out["showers_sum"][0] == 0.0
def test_overlay_matches_normalized_timestamps():
target = {
"time": ["2026-08-17T15:00"],
"precipitation": [0.0],
"rain": [0.0],
"showers": [0.0],
"snowfall": [0.0],
}
icon = {
"time": ["2026-08-17T15:00:00"],
"precipitation": [17.4],
"rain": [17.4],
"showers": [0.0],
"snowfall": [0.0],
}
out = overlay_icon_precip_on_hourly(target, icon)
assert abs(out["precipitation"][0] - 17.4) < 0.01
if __name__ == "__main__":
test_first_24h_all_shown()
test_second_day_even_hours_shown()
test_second_day_odd_dry_hidden()
test_second_day_odd_wet_shown()
test_apply_hourly_daily_precip_matches_hours()
test_overlay_matches_normalized_timestamps()
print("OK hourly_table_should_show")