Files
TJWaterServerBinary/tests/unit/test_burst_location_service.py
T
jiang fa188af0b1 refactor(db)!: adopt project-routed pooled databases
Reorganize WNDB by responsibility and remove legacy scheme endpoints.\n\nRoute analysis and time-series access through project pools, preserve transactional realtime replacement, and refresh GIS materialized views after writes.\n\nAdd database architecture documentation, live pooling coverage, API contract updates, and executable container verification.\n\nBREAKING CHANGE: legacy scheme APIs and flat app.native.wndb module imports are removed.
2026-08-25 18:35:05 +08:00

102 lines
2.6 KiB
Python

from datetime import datetime, timezone
from uuid import uuid4
import pytest
from app.services import burst_location
START = datetime(2026, 8, 1, tzinfo=timezone.utc)
END = datetime(2026, 8, 2, tzinfo=timezone.utc)
def test_analysis_simulation_query_is_keyed_by_run_id(monkeypatch):
run_id = uuid4()
captured = {}
def fake_query(**kwargs):
captured.update(kwargs)
return {"J1": []}
monkeypatch.setattr(
burst_location.InternalQueries,
"query_analysis_simulation_by_ids_timerange",
staticmethod(fake_query),
)
result = burst_location._query_simulation_values(
network="demo",
element_ids=["J1"],
element_type="node",
field="pressure",
start_dt=START,
end_dt=END,
simulation_source="analysis",
simulation_run_id=run_id,
)
assert result == {"J1": []}
assert captured["run_id"] == run_id
assert "scheme_name" not in captured
assert "scheme_type" not in captured
def test_analysis_simulation_query_requires_run_id():
with pytest.raises(ValueError, match="simulation_run_id"):
burst_location._query_simulation_values(
network="demo",
element_ids=["J1"],
element_type="node",
field="pressure",
start_dt=START,
end_dt=END,
simulation_source="analysis",
simulation_run_id=None,
)
def test_scada_mapping_uses_canonical_asset_fields(monkeypatch):
monkeypatch.setattr(
burst_location,
"get_all_scada_info",
lambda network: [
{
"device_id": "pressure-1",
"device_type": "pressure",
"node_id": "J1",
"link_id": None,
"api_query_id": "q-pressure",
},
{
"device_id": "flow-1",
"device_type": "pipe_flow",
"node_id": None,
"link_id": "P1",
"api_query_id": "q-flow",
},
],
)
assert burst_location._build_scada_mapping("demo", "pressure") == {
"J1": "q-pressure"
}
assert burst_location._build_scada_mapping("demo", "flow") == {
"P1": "q-flow"
}
def test_burst_ids_are_read_from_analysis_run(monkeypatch):
run_id = uuid4()
monkeypatch.setattr(
burst_location,
"get_analysis_run",
lambda network, value: {
"run_id": value,
"parameters": {"burst_ID": ["P1", "P2"]},
},
)
assert burst_location._get_simulation_run_burst_ids(
network="demo", run_id=run_id
) == ["P1", "P2"]