稳定 Open-Meteo 冷却缓存测试

This commit is contained in:
2569718930@qq.com
2026-05-25 18:28:00 +08:00
parent 60d684def9
commit 608befe748
+24 -3
View File
@@ -4,7 +4,11 @@ from src.data_collection.nws_open_meteo_sources import (
)
import src.data_collection.open_meteo_cache as open_meteo_cache_module
from src.data_collection.weather_sources import WeatherDataCollector
from src.database.runtime_state import OpenMeteoRateLimitRepository, RuntimeStateDB
from src.database.runtime_state import (
OpenMeteoCacheRepository,
OpenMeteoRateLimitRepository,
RuntimeStateDB,
)
def test_multi_model_parser_exposes_open_recommended_models():
@@ -144,11 +148,29 @@ def test_persisted_open_meteo_cooldown_skips_outbound_request(monkeypatch, tmp_p
monkeypatch.setenv("POLYWEATHER_DB_PATH", str(tmp_path / "polyweather.db"))
monkeypatch.setenv("OPEN_METEO_DISK_CACHE_PATH", str(tmp_path / "om-cache.json"))
db = RuntimeStateDB(str(tmp_path / "polyweather.db"))
cache_repo = OpenMeteoCacheRepository(db)
rate_repo = OpenMeteoRateLimitRepository(db)
rate_repo.set_until(9999999999.0, reason="test_429")
monkeypatch.setattr(open_meteo_cache_module, "_open_meteo_cache_repo", cache_repo)
monkeypatch.setattr(open_meteo_cache_module, "_open_meteo_rate_limit_repo", rate_repo)
collector = WeatherDataCollector({})
cache_key = (
f"{round(float(40.1281), 4)}:{round(float(32.9951), 4)}:ankara:"
f"c:{collector.multi_model_cache_version}"
)
cache_repo.replace_payload(
{
"multi_model": {
cache_key: {
"t": 9999999998.0,
"data": {"forecasts": {"ECMWF": 26.0}},
}
}
},
max_age=86400,
)
collector._load_open_meteo_disk_cache()
rate_repo.set_until(9999999999.0, reason="test_429")
def fail_http(*args, **kwargs):
raise AssertionError("Open-Meteo HTTP request should be skipped during persisted cooldown")
@@ -218,4 +240,3 @@ def test_merge_multi_model_result_with_cache_hourly():
assert merged["hourly_forecasts"]["ECMWF"] == [15.1, 15.3]
assert merged["hourly_forecasts"]["GFS"] == [14.5, None]
assert merged["hourly_forecasts"]["ICON-EU"] == [14.8, None]