init: technical-visualization-haness 하네스 설계
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from techviz.layout import DiagramLayout, EdgePath, NodeBox
|
||||
from techviz.quality import validate_layout
|
||||
from techviz.spec import VizSpec
|
||||
|
||||
|
||||
class QualityTests(unittest.TestCase):
|
||||
def test_detects_edge_passing_through_unrelated_node(self) -> None:
|
||||
spec = VizSpec.from_dict(
|
||||
{
|
||||
"version": "1.0",
|
||||
"id": "quality-case",
|
||||
"title": "Quality case",
|
||||
"question": "Does an edge cross a node?",
|
||||
"type": "architecture",
|
||||
"direction": "LR",
|
||||
"summary": "Synthetic quality test.",
|
||||
"alt": "Synthetic diagram with three nodes.",
|
||||
"long_description": "A line from A to C passes through unrelated node B.",
|
||||
"source_context": {},
|
||||
"groups": [],
|
||||
"nodes": [
|
||||
{"id": "a", "label": "A", "kind": "service", "evidence": [], "assumption": True},
|
||||
{"id": "b", "label": "B", "kind": "service", "evidence": [], "assumption": True},
|
||||
{"id": "c", "label": "C", "kind": "service", "evidence": [], "assumption": True}
|
||||
],
|
||||
"edges": [
|
||||
{"id": "a-to-c", "from": "a", "to": "c", "label": "calls", "kind": "request", "evidence": [], "assumption": True}
|
||||
]
|
||||
}
|
||||
)
|
||||
layout = DiagramLayout(
|
||||
width=500,
|
||||
height=240,
|
||||
nodes={
|
||||
"a": NodeBox("a", 20, 80, 100, 60, ["A"]),
|
||||
"b": NodeBox("b", 190, 80, 100, 60, ["B"]),
|
||||
"c": NodeBox("c", 360, 80, 100, 60, ["C"]),
|
||||
},
|
||||
groups={},
|
||||
edges={
|
||||
"a-to-c": EdgePath("a-to-c", [(120, 110), (360, 110)], 240, 70)
|
||||
},
|
||||
)
|
||||
issues = validate_layout(spec, layout)
|
||||
self.assertTrue(any(issue.code == "edge-through-node" for issue in issues))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user