feat(scada): add calibrated monitoring and incident recovery

This commit is contained in:
2026-11-07 19:44:58 +08:00
parent 26fa5d1909
commit ff8aba4964
109 changed files with 9165 additions and 629 deletions
+40
View File
@@ -0,0 +1,40 @@
from copy import deepcopy
from datetime import datetime
import pytest
from app.mcp.display_time import display_query_result, display_time_text
@pytest.mark.parametrize("original,displayed", [
("2026-07-16T00:00:00Z", "2026-07-16T08:00:00+08:00"),
("2026-07-16T08:00:00+08:00", "2026-07-16T08:00:00+08:00"),
("2026-12-31T16:00:00.123456789Z", "2027-01-01T00:00:00.123456789+08:00"),
("2026-12-31T23:00:00-03:30", "2027-01-01T10:30:00+08:00"),
])
def test_display_keeps_the_instant_precision_and_is_idempotent(original, displayed):
data = {"time": original, "sample_times": [None, original], "value": 0}
snapshot = deepcopy(data)
result = display_query_result(data)
assert result["time"] == displayed
assert result["sample_times"] == [None, displayed]
assert datetime.fromisoformat(original) == datetime.fromisoformat(displayed)
assert display_query_result(result) == result
assert data == snapshot
def test_metadata_identifiers_links_code_and_selected_ids_keep_their_spelling():
original = "2026-07-16T00:00:00Z"
fields = {key: original for key in ("id", "evidence_id", "source_ref", "next_cursor", "resource_uri", "relative_path", "instructions")}
assert display_query_result(fields) == fields
opaque_page = {"selected_path": ["source", "external_id"], "value": original}
assert display_query_result(opaque_page) == opaque_page
time_page = {"selected_path": ["source", "replay_context", "knowledge_cutoff"], "value": original}
assert display_query_result(time_page)["value"] == "2026-07-16T08:00:00+08:00"
text = f"观测{original};`{original}`;https://example.test/{original};id_{original}"
assert display_time_text(text) == text.replace("观测" + original, "观测2026-07-16T08:00:00+08:00")
@pytest.mark.parametrize("value", ["2026-07-16 08:00", "2026-07-16T08:00:00", "2026-02-30T00:00:00Z", "未记录"])
def test_unzoned_or_invalid_values_keep_their_explicit_source(value):
assert display_query_result({"time": value}) == {"time": value}