feat(scada): add project monitoring replay
This commit is contained in:
@@ -616,3 +616,52 @@ def test_project_map_config_accepts_search_and_preserves_extra_options():
|
||||
AdminProjectUpdateRequest(map_config=None)
|
||||
with pytest.raises(ValidationError):
|
||||
AdminProjectUpdateRequest(map_config={'place_search': {'enabled': True, 'admin_code': 'wrong', 'region': '凤阳县'}})
|
||||
|
||||
|
||||
def test_project_scada_monitoring_interval_is_a_strict_schedule_parameter():
|
||||
from pydantic import ValidationError
|
||||
from app.domain.schemas.admin_metadata import AdminProjectUpdateRequest
|
||||
|
||||
config = {
|
||||
"scada_monitoring_interval_seconds": 900,
|
||||
"future_option": {"enabled": True, "values": [1, "demo", None]},
|
||||
}
|
||||
request = AdminProjectUpdateRequest(settings=config)
|
||||
assert request.model_dump(exclude_unset=True) == {"settings": config}
|
||||
for value in (0, 59, True, 900.0, "900", 31_536_001):
|
||||
with pytest.raises(ValidationError):
|
||||
AdminProjectUpdateRequest(settings={"scada_monitoring_interval_seconds": value})
|
||||
for value in (None, [], "settings", {"future_option": object()}):
|
||||
with pytest.raises(ValidationError):
|
||||
AdminProjectUpdateRequest(settings=value)
|
||||
assert AdminProjectUpdateRequest().model_dump(exclude_unset=True) == {}
|
||||
assert AdminProjectUpdateRequest(settings={}).model_dump(exclude_unset=True) == {"settings": {}}
|
||||
assert AdminProjectUpdateRequest(
|
||||
settings={"scada_monitoring_interval_seconds": None}
|
||||
).model_dump(exclude_unset=True) == {"settings": {"scada_monitoring_interval_seconds": None}}
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_update_project_passes_only_requested_settings_and_returns_extra_keys(monkeypatch):
|
||||
from app.domain.schemas.admin_metadata import AdminProjectUpdateRequest
|
||||
|
||||
now = datetime.now(timezone.utc)
|
||||
project = _project(
|
||||
code="demo", description=None, gs_workspace="demo", map_extent=None,
|
||||
settings={"scada_monitoring_interval_seconds": 900, "future_option": {"enabled": True}},
|
||||
status="active", created_at=now, updated_at=now,
|
||||
)
|
||||
repo = SimpleNamespace(session=object(), update_project=AsyncMock(return_value=project))
|
||||
monkeypatch.setattr(admin_metadata, "log_audit_event", AsyncMock())
|
||||
|
||||
response = await admin_metadata.update_admin_project(
|
||||
AdminProjectUpdateRequest(settings={"future_option": {"enabled": True}}),
|
||||
project_id=project.id,
|
||||
current_user=_user(role="admin", is_superuser=True),
|
||||
metadata_repo=repo,
|
||||
)
|
||||
|
||||
repo.update_project.assert_awaited_once_with(
|
||||
project.id, updates={"settings": {"future_option": {"enabled": True}}}
|
||||
)
|
||||
assert response.settings.model_dump() == {**project.settings, "scada_monitoring": None}
|
||||
|
||||
Reference in New Issue
Block a user