import json import unittest from pathlib import Path ROOT = Path(__file__).resolve().parents[3] import sys sys.path.insert(0, str(ROOT / "scripts")) from final_acceptance import build_capacity_smoke, validate_report class Phase17AcceptanceTests(unittest.TestCase): def test_capacity_smoke_is_bounded_and_deterministic(self): first = build_capacity_smoke() second = build_capacity_smoke() self.assertEqual(first, second) self.assertEqual(first["pagination"]["requested_page_size"], 100) self.assertEqual(first["pagination"]["returned_items"], 100) self.assertEqual(first["pagination"]["synthetic_total"], 1000) self.assertEqual(first["large_batch"]["input_items"], 5000) self.assertLessEqual(first["large_batch"]["retained_items"], 100) self.assertTrue(first["bounded"]) def test_report_schema_rejects_missing_or_wrong_fields(self): report = { "report": "phase17-final-acceptance", "version": 1, "scope": "local-repository-acceptance", "passed": True, "checks": {}, "capacity_smoke": build_capacity_smoke(), "blockers": [], "limitations": [], } self.assertEqual(validate_report(report), []) missing = dict(report) del missing["checks"] self.assertTrue(validate_report(missing)) wrong = dict(report) wrong["passed"] = "yes" self.assertTrue(validate_report(wrong)) def test_report_serialization_is_stable(self): from final_acceptance import deterministic_json report = { "z": 1, "a": {"items": [{"b": 2, "a": 1}]}, } self.assertEqual(deterministic_json(report), deterministic_json(json.loads(deterministic_json(report)))) if __name__ == "__main__": unittest.main()