test(topology): require database-driven visual semantics
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -40,6 +40,36 @@ class GuanghanTopologySourceTests(unittest.TestCase):
|
|||||||
self.assertIn("const API_BASE = ''", self.html)
|
self.assertIn("const API_BASE = ''", self.html)
|
||||||
self.assertNotIn("http://localhost:5000", self.html)
|
self.assertNotIn("http://localhost:5000", self.html)
|
||||||
|
|
||||||
|
def test_page_uses_database_presentation_payload(self) -> None:
|
||||||
|
self.assertIn("currentData.layout.presentation", self.html)
|
||||||
|
self.assertIn("nodeStyles", self.html)
|
||||||
|
self.assertIn("edgeStyles", self.html)
|
||||||
|
self.assertIn("decorationStyles", self.html)
|
||||||
|
self.assertIn("legendItems", self.html)
|
||||||
|
|
||||||
|
def test_business_visual_semantics_are_not_css_hardcoded(self) -> None:
|
||||||
|
forbidden = [
|
||||||
|
".connection.structural",
|
||||||
|
".connection.pressurized",
|
||||||
|
".connection.utility",
|
||||||
|
".node-card { fill:",
|
||||||
|
".core-card { fill:",
|
||||||
|
".power-card { fill:",
|
||||||
|
".power-node-card { fill:",
|
||||||
|
".vehicle-card { fill:",
|
||||||
|
"function connectionClass",
|
||||||
|
]
|
||||||
|
for token in forbidden:
|
||||||
|
self.assertNotIn(token, self.html)
|
||||||
|
|
||||||
|
def test_legend_is_rendered_from_presentation_payload(self) -> None:
|
||||||
|
self.assertIn('id="legend"', self.html)
|
||||||
|
self.assertNotIn("结构直连</span>", self.html)
|
||||||
|
self.assertNotIn("加压走道</span>", self.html)
|
||||||
|
self.assertNotIn("燃料 / 供电</span>", self.html)
|
||||||
|
self.assertNotIn("大型折叠散热面板</span>", self.html)
|
||||||
|
self.assertIn("renderLegend", self.html)
|
||||||
|
|
||||||
def test_controls_use_api_navigation_and_safe_text(self) -> None:
|
def test_controls_use_api_navigation_and_safe_text(self) -> None:
|
||||||
self.assertIn("/api/v1/bases/guanghan/missions", self.html)
|
self.assertIn("/api/v1/bases/guanghan/missions", self.html)
|
||||||
self.assertNotIn("return ['BL-01'", self.html)
|
self.assertNotIn("return ['BL-01'", self.html)
|
||||||
|
|||||||
Reference in New Issue
Block a user