from __future__ import annotations import json import pytest from app.ui import parse_rid, pretty_json, _as_text, _table_rows def test_pretty_json_indents() -> None: assert '"vendor": "HEB"' in pretty_json('{"vendor":"HEB"}') assert '"a": 1' in pretty_json('{"a": 1}') def test_pretty_json_rejects_garbage() -> None: with pytest.raises(json.JSONDecodeError): pretty_json("not json") def test_parse_rid() -> None: assert parse_rid("3") == 3 assert parse_rid(3.0) == 3 assert parse_rid("") is None assert parse_rid(None) is None def test_as_text_joins_code_widget_lists() -> None: assert _as_text(["{", "}"]) == "{\n}" def test_table_rows_from_lists() -> None: assert _table_rows([["1", "HEB"]]) == [["1", "HEB"]] def test_phone_page_splits_camera_and_library() -> None: from app.ui import PHONE_HTML assert 'id="cam"' in PHONE_HTML assert 'id="lib"' in PHONE_HTML assert 'capture="environment"' in PHONE_HTML cam = PHONE_HTML.split('id="cam"', 1)[1].split("/>", 1)[0] lib = PHONE_HTML.split('id="lib"', 1)[1].split("/>", 1)[0] assert "capture=" in cam assert "capture=" not in lib assert "accept=\"image/*\"" in cam assert "input{display:none}" not in PHONE_HTML assert "opacity:0" in PHONE_HTML assert "/api/jobs/" in PHONE_HTML assert "Completed:" in PHONE_HTML assert "/api/inbox" in PHONE_HTML assert "Safari" in PHONE_HTML assert "heic" in PHONE_HTML.lower()