49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
"""FU-8a / GAP-21: sync --verify drift-gate logic (offline)."""
|
|
from __future__ import annotations
|
|
|
|
import importlib.util
|
|
from pathlib import Path
|
|
|
|
_SCRIPT = Path(__file__).resolve().parents[2] / "scripts" / "sync_agents_across_companies.py"
|
|
_spec = importlib.util.spec_from_file_location("sync_agents", _SCRIPT)
|
|
sync = importlib.util.module_from_spec(_spec)
|
|
_spec.loader.exec_module(sync)
|
|
|
|
|
|
def _agent(name, adapter="claude_code", cfg=None):
|
|
return {"id": f"id-{name}", "name": name, "adapter_type": adapter,
|
|
"adapter_config": cfg or {"model": "x"}, "runtime_config": {}, "metadata": {},
|
|
"budget_monthly_cents": 0, "icon": "", "title": "", "role": "", "agent_api_keys": []}
|
|
|
|
|
|
def test_verify_exit_code_clean_is_zero():
|
|
assert sync._verify_exit_code(plan=[], mismatches=[], missing=[]) == 0
|
|
|
|
|
|
def test_verify_exit_code_drift_is_nonzero():
|
|
assert sync._verify_exit_code(plan=[("m", "mi", {"x": 1})], mismatches=[], missing=[]) == 1
|
|
|
|
|
|
def test_verify_exit_code_adapter_mismatch_is_nonzero():
|
|
assert sync._verify_exit_code(plan=[], mismatches=["עוזר משפטי"], missing=[]) == 1
|
|
|
|
|
|
def test_verify_exit_code_missing_is_nonzero():
|
|
assert sync._verify_exit_code(plan=[], mismatches=[], missing=["סוכן"]) == 1
|
|
|
|
|
|
def test_build_drift_report_flags_adapter_mismatch():
|
|
master = [_agent("A", adapter="claude_code")]
|
|
mirror_by_name = {"A": _agent("A", adapter="deepseek_local")}
|
|
rep = sync.build_drift_report(master, mirror_by_name, mirror_skills=set(), only=None)
|
|
assert "A" in rep["mismatches"]
|
|
assert rep["plan"] == []
|
|
|
|
|
|
def test_build_drift_report_flags_missing_and_plan():
|
|
master = [_agent("A"), _agent("B")]
|
|
mirror_by_name = {"B": _agent("B", cfg={"model": "different"})}
|
|
rep = sync.build_drift_report(master, mirror_by_name, mirror_skills=set(), only=None)
|
|
assert "A" in rep["missing"]
|
|
assert any(p[0]["name"] == "B" for p in rep["plan"])
|