catopt-graph-graph-calculus.../tests/test_contract_registry.py

49 lines
2.1 KiB
Python

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