import json import hashlib import pytest from marketmesh_privacy_preserving_federated_.core import DeltaSync def test_delta_sync_merge_basic(): ds1 = DeltaSync( contract_id="c1", version_vector={"p1": 1}, payload={"revenue": 10.0, "customers": 5.0}, hash_="h1", ) ds2 = DeltaSync( contract_id="c1", version_vector={"p1": 2, "p2": 1}, payload={"revenue": 20.0, "customers": 3.0, "activation": 0.5}, hash_="h2", ) merged = ds1.merge(ds2) # version vector should be per-peer max assert merged.contract_id == "c1" assert merged.version_vector["p1"] == 2 assert merged.version_vector["p2"] == 1 # KPI merging: revenue and customers present in both -> average; new KPI from ds2 is included assert pytest.approx(merged.payload["revenue"]) == (10.0 + 20.0) / 2.0 assert pytest.approx(merged.payload["customers"]) == (5.0 + 3.0) / 2.0 assert pytest.approx(merged.payload["activation"]) == 0.5 # Merging again with the same pair should produce the same result (deterministic) merged_again = ds1.merge(ds2) assert merged.payload == merged_again.payload assert merged.version_vector == merged_again.version_vector assert merged.hash == merged_again.hash