稳定 Open-Meteo 冷却缓存测试
This commit is contained in:
@@ -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
|
import src.data_collection.open_meteo_cache as open_meteo_cache_module
|
||||||
from src.data_collection.weather_sources import WeatherDataCollector
|
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():
|
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("POLYWEATHER_DB_PATH", str(tmp_path / "polyweather.db"))
|
||||||
monkeypatch.setenv("OPEN_METEO_DISK_CACHE_PATH", str(tmp_path / "om-cache.json"))
|
monkeypatch.setenv("OPEN_METEO_DISK_CACHE_PATH", str(tmp_path / "om-cache.json"))
|
||||||
db = RuntimeStateDB(str(tmp_path / "polyweather.db"))
|
db = RuntimeStateDB(str(tmp_path / "polyweather.db"))
|
||||||
|
cache_repo = OpenMeteoCacheRepository(db)
|
||||||
rate_repo = OpenMeteoRateLimitRepository(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)
|
monkeypatch.setattr(open_meteo_cache_module, "_open_meteo_rate_limit_repo", rate_repo)
|
||||||
|
|
||||||
collector = WeatherDataCollector({})
|
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):
|
def fail_http(*args, **kwargs):
|
||||||
raise AssertionError("Open-Meteo HTTP request should be skipped during persisted cooldown")
|
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"]["ECMWF"] == [15.1, 15.3]
|
||||||
assert merged["hourly_forecasts"]["GFS"] == [14.5, None]
|
assert merged["hourly_forecasts"]["GFS"] == [14.5, None]
|
||||||
assert merged["hourly_forecasts"]["ICON-EU"] == [14.8, None]
|
assert merged["hourly_forecasts"]["ICON-EU"] == [14.8, None]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user