import unittest from core.contract_registry import ContractRegistry class TestContractRegistry(unittest.TestCase): def test_register_and_get_contract(self): reg = ContractRegistry() schema = { "name": "LocalProblem", "version": "1.0.0", "required_fields": ["id", "objective"] } reg.register_contract("LocalProblem", "1.0.0", schema) self.assertEqual(reg.get_contract("LocalProblem", "1.0.0"), schema) def test_list_versions(self): reg = ContractRegistry() reg.register_contract("LocalProblem", "1.0.0", {"required_fields": ["id"]}) reg.register_contract("LocalProblem", "1.1.0", {"required_fields": ["id", "objective"]}) versions = reg.list_versions("LocalProblem") self.assertIn("1.0.0", versions) self.assertIn("1.1.0", versions) def test_conformance_check_passes(self): reg = ContractRegistry() reg.register_contract("LocalProblem", "1.0.0", {"required_fields": ["id", "objective"]}) adapter_data = {"id": "lp-1", "objective": 42} self.assertTrue(reg.conformance_check("LocalProblem", "1.0.0", adapter_data)) def test_conformance_check_fails_on_missing_field(self): reg = ContractRegistry() reg.register_contract("LocalProblem", "1.0.0", {"required_fields": ["id", "objective"]}) adapter_data = {"id": "lp-1"} self.assertFalse(reg.conformance_check("LocalProblem", "1.0.0", adapter_data)) def test_contract_migration(self): reg = ContractRegistry() reg.register_contract("LocalProblem", "1.0.0", {"required_fields": ["id"]}) # Migrate to a new version with a richer schema reg.migrate_contract("LocalProblem", "1.0.0", "1.1.0", {"required_fields": ["id", "objective"]}) # New version should exist self.assertEqual(reg.get_contract("LocalProblem", "1.1.0"), {"required_fields": ["id", "objective"]}) # Old version should be marked as migrated to the new version old = reg.get_contract("LocalProblem", "1.0.0") self.assertIsNotNone(old) self.assertEqual(old.get("migrated_to"), "1.1.0")