import json import os import sys import pathlib # Ensure the repository root is on sys.path for pytest imports ROOT = pathlib.Path(__file__).resolve().parents[1] if str(ROOT) not in sys.path: sys.path.insert(0, str(ROOT)) from marketcompiler_verifiable_dsl_edge_compi.core import LocalProblem, PlanDelta, AuditLog from marketcompiler_verifiable_dsl_edge_compi.signer import Signer from marketcompiler_verifiable_dsl_edge_compi.backtest import Backtester def test_local_problem_serialization(): lp = LocalProblem(id="lp-001", assets=["AAPL", "MSFT"], objectives={"return": 0.1}, constraints={"max_drawdown": 0.2}) s = lp.to_json() lp2 = LocalProblem.from_json(s) assert lp2.id == lp.id assert lp2.assets == lp.assets def test_plan_delta_signing_and_json_roundtrip(): delta = PlanDelta(delta={"step": "init"}, author="tester", contract_id="c1", version=1) payload = delta.to_json() sig = Signer.sign(payload) assert Signer.verify(payload, sig) # Roundtrip through JSON keeps signature validity conceptually delta2 = PlanDelta.from_json(payload) assert delta2.version == delta.version def test_backtester_runs(): lp = LocalProblem(id="lp-002", assets=["AAPL", "MSFT"], objectives={"return": 0.08}, constraints={"liquidity": 0.5}) res = Backtester.run(lp) assert isinstance(res, dict) assert "score" in res