52 lines
1.7 KiB
Python
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]
|