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()