test: выровнять weather_cache/nspd_geo тесты под #1377/#1336 (CI red→green)
All checks were successful
CI / changes (push) Successful in 7s
CI / changes (pull_request) Successful in 9s
CI / frontend-tests (push) Successful in 1m4s
CI / frontend-tests (pull_request) Successful in 57s
CI / openapi-codegen-check (push) Successful in 2m7s
CI / openapi-codegen-check (pull_request) Successful in 1m41s
CI / backend-tests (push) Successful in 8m59s
CI / backend-tests (pull_request) Successful in 8m58s
All checks were successful
CI / changes (push) Successful in 7s
CI / changes (pull_request) Successful in 9s
CI / frontend-tests (push) Successful in 1m4s
CI / frontend-tests (pull_request) Successful in 57s
CI / openapi-codegen-check (push) Successful in 2m7s
CI / openapi-codegen-check (pull_request) Successful in 1m41s
CI / backend-tests (push) Successful in 8m59s
CI / backend-tests (pull_request) Successful in 8m58s
backend-tests CI упал на 4 стейл-тестах — код автофиксов обновили, тесты нет: - test_weather_cache: фикстура _make_air_response отдавала hourly-форму, а код (#1377) теперь читает current-bucket → current.time пуст → None. Фикстура → current. - test_nspd_geo: 2 теста стерегли ошибочный ST_Transform(3857→4326), который #1336 убрал (геометрия уже WGS84, иначе Null Island). Ассерты через _strip_sql_comments (как сиблинг parcel-тест) → ST_SetSRID(...,4326) без ST_Transform. Переименованы. Локально: 38 passed (оба файла).
This commit is contained in:
parent
edfdd04923
commit
be70cacf18
2 changed files with 24 additions and 17 deletions
|
|
@ -99,13 +99,13 @@ def _make_httpx_response(payload: dict[str, Any]) -> MagicMock:
|
|||
|
||||
|
||||
def _make_air_response() -> dict[str, Any]:
|
||||
"""Минимальный валидный JSON от Open-Meteo Air Quality API (24 часа forecast)."""
|
||||
"""Минимальный валидный JSON от Open-Meteo Air Quality API (current bucket, #1377)."""
|
||||
return {
|
||||
"hourly": {
|
||||
"time": ["2026-06-12T00:00", "2026-06-12T01:00"],
|
||||
"pm2_5": [12.5, 13.0],
|
||||
"pm10": [25.0, 26.0],
|
||||
"nitrogen_dioxide": [15.0, 16.0],
|
||||
"current": {
|
||||
"time": "2026-06-12T14:00",
|
||||
"pm2_5": 12.5,
|
||||
"pm10": 25.0,
|
||||
"nitrogen_dioxide": 15.0,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -187,13 +187,17 @@ def test_save_quarter_sql_wraps_geom_in_st_multi() -> None:
|
|||
assert "ST_Multi(" in sql, "SQL _save_quarter должен содержать ST_Multi для MultiPolygon schema"
|
||||
|
||||
|
||||
def test_save_quarter_sql_keeps_3857_to_4326_transform() -> None:
|
||||
"""quarter GeoJSON в Mercator (3857) → ST_Transform к 4326 сохраняется (mirror bulk path)."""
|
||||
def test_save_quarter_sql_no_transform_wgs84() -> None:
|
||||
"""quarter GeoJSON уже в WGS84 (rosreestr2coord) → ST_SetSRID(...,4326) БЕЗ ST_Transform
|
||||
(#1336: ST_Transform из 3857 трактовал градусы как метры → коллапс к Null Island).
|
||||
ST_Multi сохраняется — колонка cad_quarters_geom.geom = MultiPolygon."""
|
||||
db, captured = _capturing_db()
|
||||
_save_quarter(db, _quarter_payload(), "66:41:0610029")
|
||||
|
||||
sql, _params = captured[0]
|
||||
assert "ST_Transform(ST_SetSRID(ST_GeomFromGeoJSON(:g), 3857), 4326)" in sql
|
||||
executable = _strip_sql_comments(sql)
|
||||
assert "ST_Multi(ST_SetSRID(ST_GeomFromGeoJSON(:g), 4326))" in executable
|
||||
assert "ST_Transform" not in executable
|
||||
|
||||
|
||||
def test_save_parcel_empty_features_returns_zero() -> None:
|
||||
|
|
@ -261,15 +265,18 @@ def test_save_building_derives_quarter_when_missing() -> None:
|
|||
assert params["qcad"] == "66:41:0610029"
|
||||
|
||||
|
||||
def test_save_building_geom_transform_no_st_multi() -> None:
|
||||
"""cad_buildings.geom = GEOMETRY(Geometry, 4326) полиморфный → ST_Multi НЕ нужен,
|
||||
transform 3857→4326 сохраняется (mirror upsert_building)."""
|
||||
def test_save_building_geom_no_transform_no_st_multi() -> None:
|
||||
"""cad_buildings.geom = GEOMETRY(Geometry, 4326) полиморфный → ST_Multi НЕ нужен;
|
||||
геометрия уже WGS84 (rosreestr2coord) → ST_SetSRID(...,4326) БЕЗ ST_Transform
|
||||
(#1336: ST_Transform из 3857 → Null Island)."""
|
||||
db, captured = _capturing_db()
|
||||
_save_building(db, _building_payload(), "66:41:0610029:83")
|
||||
|
||||
sql, _params = captured[0]
|
||||
assert "ST_Transform(ST_SetSRID(ST_GeomFromGeoJSON(:g), 3857), 4326)" in sql
|
||||
assert "ST_Multi(" not in sql # полиморфная колонка — coerce не нужен
|
||||
executable = _strip_sql_comments(sql)
|
||||
assert "ST_SetSRID(ST_GeomFromGeoJSON(:g), 4326)" in executable
|
||||
assert "ST_Transform" not in executable
|
||||
assert "ST_Multi(" not in executable # полиморфная колонка — coerce не нужен
|
||||
|
||||
|
||||
def test_save_building_skips_feature_with_other_cad_num() -> None:
|
||||
|
|
@ -562,9 +569,9 @@ def test_soft_time_limit_exceeded_flushes_heartbeat(monkeypatch: Any) -> None:
|
|||
for sql, params in captured
|
||||
if "heartbeat_at = NOW()" in sql and "targets_done" in sql
|
||||
]
|
||||
assert heartbeat_updates, (
|
||||
"SoftTimeLimitExceeded handler должен flush'нуть heartbeat с counters перед raise"
|
||||
)
|
||||
assert (
|
||||
heartbeat_updates
|
||||
), "SoftTimeLimitExceeded handler должен flush'нуть heartbeat с counters перед raise"
|
||||
|
||||
|
||||
def test_soft_time_limit_exceeded_does_not_overwrite_paused_with_failed(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue