补齐实时观测采集源覆盖

This commit is contained in:
2569718930@qq.com
2026-06-16 23:01:29 +08:00
parent 8edcedb300
commit 53cf5b556b
4 changed files with 209 additions and 3 deletions
+96
View File
@@ -127,6 +127,102 @@ def test_source_adapter_collects_mgm_with_keyword_flags_and_station_metadata():
assert record.station_name == "Esenboga Airport"
def test_source_adapter_collects_jma_official_nearby_rows():
from web.services.observation_source_adapters import collect_observation_source
calls = []
class FakeWeather:
def _attach_japan_official_nearby(self, results, city, use_fahrenheit):
calls.append((city, use_fahrenheit))
results["jma_current"] = {
"source": "jma_amedas",
"source_label": "JMA",
"temp": 23.4,
"obs_time": "2026-06-16T06:00:00+09:00",
"station_code": "44166",
"station_name": "Haneda",
}
result = collect_observation_source(
FakeWeather(),
"jma_amedas",
"tokyo",
use_fahrenheit=False,
)
assert calls == [("tokyo", False)]
assert result.status == "ok"
assert len(result.records) == 1
assert result.records[0].source == "jma_amedas"
assert result.records[0].value == 23.4
assert result.records[0].observed_at == "2026-06-16T06:00:00+09:00"
assert result.records[0].station_code == "44166"
def test_source_adapter_collects_cwa_direct_settlement_payload():
from web.services.observation_source_adapters import collect_observation_source
calls = []
class FakeWeather:
def fetch_cwa_taipei_settlement_current(self):
calls.append("fetch_cwa")
return {
"source": "cwa",
"source_label": "CWA",
"station_code": "466920",
"station_name": "Taipei",
"observation_time": "2026-06-16T06:00:00+08:00",
"current": {"temp": 29.2},
}
result = collect_observation_source(
FakeWeather(),
"cwa",
"taipei",
use_fahrenheit=False,
)
assert calls == ["fetch_cwa"]
assert result.status == "ok"
assert result.records[0].source == "cwa"
assert result.records[0].value == 29.2
assert result.records[0].observed_at == "2026-06-16T06:00:00+08:00"
assert result.records[0].station_code == "466920"
def test_source_adapter_collects_metar_for_low_frequency_cities():
from web.services.observation_source_adapters import collect_observation_source
calls = []
class FakeWeather:
def fetch_metar(self, city, use_fahrenheit=False, utc_offset=0):
calls.append((city, use_fahrenheit, utc_offset))
return {
"source": "metar",
"icao": "LEMD",
"station_name": "Madrid Barajas",
"observation_time": "2026-06-16T12:00:00.000Z",
"current": {"temp": 28.0},
}
result = collect_observation_source(
FakeWeather(),
"metar",
"madrid",
use_fahrenheit=False,
)
assert calls == [("madrid", False, 3600)]
assert result.status == "ok"
assert result.records[0].source == "metar"
assert result.records[0].value == 28.0
assert result.records[0].observed_at == "2026-06-16T12:00:00.000Z"
assert result.records[0].station_code == "LEMD"
def test_source_adapter_reports_parse_error_for_unusable_source_rows():
from web.services.observation_source_adapters import collect_observation_source