41 lines
2.0 KiB
Python
41 lines
2.0 KiB
Python
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}
|