import pytest from idea85_blockenergy_mesh_verifiable.primitives import LocalProblem from idea85_blockenergy_mesh_verifiable.adapters import SubstationMeterAdapter, DerAggregatorAdapter from idea85_blockenergy_mesh_verifiable.proofs import verify_proof from datetime import datetime def sample_meter_payload(): return { "node_id": "substation-1", "timestamp": datetime.utcnow().isoformat(), "horizon_minutes": 60, "net_load_kw": [10.0, 12.0, 11.0, 9.0], "capacity_kw": 12.0, } def test_substation_adapter_plan_and_proof(): adapter = SubstationMeterAdapter("submeter") payload = sample_meter_payload() out = adapter.produce_plan_and_proof(payload) assert "plan_delta" in out and "proof" in out plan_delta = out["plan_delta"] proof = out["proof"] # Plan delta is a PlanDelta model assert plan_delta.node_id == payload["node_id"] # Proof verifies against original LocalProblem lp = adapter.to_local_problem(payload) assert verify_proof(lp.dict(), proof) def test_der_adapter_plan_and_proof(): adapter = DerAggregatorAdapter("deragg") payload = { "id": "der-1", "ts": datetime.utcnow().isoformat(), "horizon": 60, "profile": [2.0, 3.0, 5.0, 1.0], "cap": 6.0, } out = adapter.produce_plan_and_proof(payload) assert "plan_delta" in out and "proof" in out lp = adapter.to_local_problem(payload) assert verify_proof(lp.dict(), out["proof"]) is True