Files
PolyWeather/tests/test_city_realtime_stream.py
T
2026-06-14 17:53:24 +08:00

52 lines
1.7 KiB
Python

from __future__ import annotations
def test_realtime_stream_reads_canonical_latest_without_analysis(monkeypatch):
import web.services.city_realtime_stream as stream
stream._STREAM_BUFFERS.clear()
class FakeDB:
def get_canonical_temperature(self, city):
assert city == "shanghai"
return {
"payload": {
"city": "shanghai",
"value": 30.5,
"source": "amsc_awos",
"source_label": "AMSC AWOS runway-point air temperature",
"observed_at": "2026-06-14T04:00:00+00:00",
"freshness_status": "fresh",
},
}
def get_city_cache(self, kind, city):
assert city == "shanghai"
if kind != "panel":
return None
return {
"payload": {
"probabilities": {
"distribution": [
{"temp": 30.0, "label": "30°C"},
{"temp": 32.0, "label": "32°C"},
]
}
}
}
def fail_analyze(*_args, **_kwargs):
raise AssertionError("realtime stream must read cache/latest instead of _analyze")
monkeypatch.setattr(stream, "_CACHE_DB", FakeDB(), raising=False)
monkeypatch.setattr(stream, "_analyze", fail_analyze)
payload = stream.get_realtime_stream_payload("shanghai")
assert payload["points"][-1] == {
"timestamp": "2026-06-14T04:00:00+00:00",
"temp": 30.5,
"source": "amsc_awos",
}
assert [row["threshold_c"] for row in payload["thresholds"]] == [30.0, 32.0]