test_q4b_ui_integrity.py python
56 lines 1.5 KB
Raw
sha256:a78e7e5a8740e03315f325d19edeb3aa1b306b3337d04abbaa9a9e0f3bbeb7a1 docs: MuseHub-first before ISR #74 — staging solidify NEXT Human 9 hours ago
1 """Data-integrity tests for Track Q / Q4b Path B UI redesign (§Q4A.15)."""
2
3 from __future__ import annotations
4
5 import hashlib
6 import xml.etree.ElementTree as ET
7 from pathlib import Path
8
9 from tools.app.server import STATIC_ROOT
10
11 DIAGRAM_FILES = (
12 "lanes.svg",
13 "regimes.svg",
14 "layers.svg",
15 "kit-consumer.svg",
16 )
17
18 CREDENTIAL_MARKERS = (
19 "test-session-credential",
20 "test-csrf-token",
21 "session_credential:",
22 "csrf_token:",
23 )
24
25
26 def _digest(path: Path) -> str:
27 return hashlib.sha256(path.read_bytes()).hexdigest()
28
29
30 def test_diagram_svgs_well_formed_and_checksum_stable() -> None:
31 digests_first: dict[str, str] = {}
32 for name in DIAGRAM_FILES:
33 path = STATIC_ROOT / "assets" / "diagrams" / name
34 raw = path.read_bytes()
35 assert len(raw) > 0
36 root = ET.fromstring(raw)
37 assert root.tag.endswith("svg")
38 digests_first[name] = _digest(path)
39
40 digests_second = {
41 name: _digest(STATIC_ROOT / "assets" / "diagrams" / name) for name in DIAGRAM_FILES
42 }
43 assert digests_first == digests_second
44
45
46 def test_no_credential_leakage_in_static_assets() -> None:
47 targets = [
48 STATIC_ROOT / "index.html",
49 STATIC_ROOT / "assets" / "app.js",
50 STATIC_ROOT / "assets" / "app.css",
51 *[STATIC_ROOT / "assets" / "diagrams" / name for name in DIAGRAM_FILES],
52 ]
53 for path in targets:
54 text = path.read_text(encoding="utf-8")
55 for marker in CREDENTIAL_MARKERS:
56 assert marker not in text
File History 1 commit
sha256:a78e7e5a8740e03315f325d19edeb3aa1b306b3337d04abbaa9a9e0f3bbeb7a1 docs: MuseHub-first before ISR #74 — staging solidify NEXT Human 9 hours ago