Files
TJWaterServerBinary/tests/unit/test_scheme_management_lifecycle.py
T
jiang 9b095c7439 refactor(db)!: clean up business SQL access
- make realtime replacement and analysis result writes transactional\n- consolidate SCADA repositories and remove process-global project state\n- validate SCADA batches and use indexed GIS-backed business queries\n\nBREAKING CHANGE: remove the public analysis result writer and the pipeline-health network_name query parameter.
2026-08-28 11:37:36 +08:00

100 lines
3.0 KiB
Python

from unittest.mock import MagicMock
from app.services import scheme_management
def _mock_connection(monkeypatch):
cursor = MagicMock()
cursor.rowcount = 1
connection = MagicMock()
connection.cursor.return_value.__enter__.return_value = cursor
context = MagicMock()
context.__enter__.return_value = connection
monkeypatch.setattr(scheme_management, "project_connection", lambda _name: context)
return cursor
def test_repeated_analysis_names_create_distinct_run_ids(monkeypatch) -> None:
cursor = _mock_connection(monkeypatch)
arguments = {
"name": "tjwater_next",
"scheme_name": "same-window",
"scheme_type": "burst_analysis",
"username": "alice",
"scheme_start_time": "2026-08-24T00:00:00Z",
"scheme_detail": {},
}
first = scheme_management.create_analysis_run(**arguments)
second = scheme_management.create_analysis_run(**arguments)
assert first != second
assert cursor.execute.call_count == 2
assert all(
"insert into analysis.runs" in call.args[0].lower()
for call in cursor.execute.call_args_list
)
def test_update_analysis_run_targets_execution_id(monkeypatch) -> None:
cursor = _mock_connection(monkeypatch)
run_id = scheme_management.create_analysis_run(
name="tjwater_next",
scheme_name="run",
scheme_type="burst_analysis",
username="alice",
scheme_start_time="2026-08-24T00:00:00Z",
scheme_detail={},
)
cursor.reset_mock()
scheme_management.update_analysis_run(
"tjwater_next",
run_id,
status="completed",
username="alice",
scheme_detail={"window": "24h"},
)
statement, params = cursor.execute.call_args.args
assert "where run_id = %s" in statement.lower()
assert params[-1] == run_id
assert params[1] == "completed"
def test_run_and_business_result_share_one_transaction(monkeypatch) -> None:
connection = object()
context = MagicMock()
context.__enter__.return_value = connection
monkeypatch.setattr(
scheme_management,
"project_transaction",
lambda _name: context,
)
created_ids = []
result_ids = []
monkeypatch.setattr(
scheme_management.AnalysisRepository,
"create_run_sync",
lambda conn, **kwargs: created_ids.append((conn, kwargs["run_id"])),
)
monkeypatch.setattr(
scheme_management.AnalysisRepository,
"insert_result_sync",
lambda conn, run_id, **_kwargs: result_ids.append((conn, run_id)),
)
run_id = scheme_management.store_analysis_run_with_result(
name="tjwater_v2",
scheme_name="leak-run",
scheme_type="dma_leak_identification",
username="alice",
scheme_start_time="2026-08-24T00:00:00Z",
scheme_detail={},
result_type="leakage_identification",
result_payload={"rows": []},
)
assert created_ids == [(connection, run_id)]
assert result_ids == [(connection, run_id)]