Files
TJWaterServerBinary/tests/unit/test_wndb_batch_transactions.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

84 lines
2.3 KiB
Python

from contextlib import contextmanager
import pytest
from app.native.wndb.commands import executor
from app.native.wndb.core.database import ChangeSet
def test_batch_commits_before_materialized_view_refresh(monkeypatch) -> None:
events: list[str] = []
@contextmanager
def fake_transaction(_name: str):
events.append("transaction-enter")
yield object()
events.append("transaction-exit")
monkeypatch.setattr(executor, "project_transaction", fake_transaction)
monkeypatch.setattr(
executor,
"expand_command",
lambda _name, change_set: change_set,
)
monkeypatch.setattr(
executor,
"_execute_update_command",
lambda _name, _change_set: events.append("write") or ChangeSet(),
)
monkeypatch.setattr(
executor,
"refresh_materialized_views",
lambda _name: events.append("refresh"),
)
executor.execute_batch_commands(
"project_a",
ChangeSet({"operation": "update", "type": "junction", "id": "J1"}),
)
assert events == [
"transaction-enter",
"write",
"transaction-exit",
"refresh",
]
def test_failed_batch_does_not_refresh_materialized_views(monkeypatch) -> None:
events: list[str] = []
@contextmanager
def fake_transaction(_name: str):
events.append("transaction-enter")
try:
yield object()
finally:
events.append("transaction-exit")
monkeypatch.setattr(executor, "project_transaction", fake_transaction)
monkeypatch.setattr(
executor,
"expand_command",
lambda _name, change_set: change_set,
)
def fail_write(_name, _change_set):
events.append("write")
raise RuntimeError("write failed")
monkeypatch.setattr(executor, "_execute_update_command", fail_write)
monkeypatch.setattr(
executor,
"refresh_materialized_views",
lambda _name: events.append("refresh"),
)
with pytest.raises(RuntimeError, match="write failed"):
executor.execute_batch_commands(
"project_a",
ChangeSet({"operation": "update", "type": "junction", "id": "J1"}),
)
assert events == ["transaction-enter", "write", "transaction-exit"]