31 lines
1.4 KiB
Python
31 lines
1.4 KiB
Python
import json, unittest
|
|
import xml.etree.ElementTree as ET
|
|
from pathlib import Path
|
|
from application_landing_zone_agent import LandingZoneAgent, ValidationError
|
|
|
|
class AgentContractTests(unittest.TestCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.data = json.loads(Path("examples/application.json").read_text())
|
|
cls.agent = LandingZoneAgent()
|
|
def test_generation_is_deterministic_and_complete(self):
|
|
a, b = self.agent.generate(self.data), self.agent.generate(self.data)
|
|
self.assertEqual(a, b)
|
|
self.assertIn("## Component inventory", a.tsd_markdown)
|
|
self.assertIn("Orders API", a.tsd_markdown)
|
|
self.assertTrue(a.validation.valid)
|
|
def test_drawio_is_native_xml_with_vertices_and_edges(self):
|
|
root = ET.fromstring(self.agent.generate(self.data).drawio_xml)
|
|
self.assertEqual(root.tag, "mxfile")
|
|
self.assertIsNotNone(root.find(".//mxGraphModel"))
|
|
self.assertGreaterEqual(len(root.findall(".//mxCell[@vertex='1']")), 4)
|
|
self.assertGreaterEqual(len(root.findall(".//mxCell[@edge='1']")), 1)
|
|
def test_required_input_errors(self):
|
|
with self.assertRaises(ValidationError): self.agent.generate({"application_name": "x"})
|
|
def test_cli_fixture_has_expected_contract(self):
|
|
report = self.agent.validate(self.data)
|
|
self.assertFalse(report.errors)
|
|
self.assertEqual(report.warnings, [])
|
|
|
|
if __name__ == "__main__": unittest.main()
|