import datetime import pytest import os import sys # Ensure the local src/ package is on PYTHONPATH for tests ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) SRC = os.path.join(ROOT, "src") if SRC not in sys.path: sys.path.insert(0, SRC) from cosmosmesh_privacy_preserving_federated.catopt_bridge import ( LocalProblem, SharedVariables, DualVariables, PlanDelta, PrivacyBudget, AuditLog, GraphOfContracts, sample_end_to_end_mapping, ) def test_catopt_basic_dataclasses_roundtrip(): lp = LocalProblem( id="lp-xyz", domain="test", assets=["a1"], objective={"maximize": 1.0}, constraints=[{"c": 1}], ) sv = SharedVariables(version=1) dv = DualVariables(version=1) _ = lp.to_catopt() _ = sv.to_catopt() _ = dv.to_catopt() def test_sample_end_to_end_mapping_returns_three_catopt_dicts(): lp_dict, sv_dict, dv_dict = sample_end_to_end_mapping() assert isinstance(lp_dict, dict) and lp_dict.get("type") == "LocalProblem" assert isinstance(sv_dict, dict) and sv_dict.get("type") == "SharedVariables" assert isinstance(dv_dict, dict) and dv_dict.get("type") == "DualVariables" def test_graph_of_contracts_basic(): g = GraphOfContracts() g.register("contract-A", {"name": "TestAdapter", "version": "0.0.1"}) items = g.list_contracts() assert isinstance(items, list) and items[0]["contract_id"] == "contract-A"