from pathlib import Path
import json,sys
sys.path.insert(0,str(Path(__file__).parent))
from evaluator import evaluate
cs=json.loads((Path(__file__).parent/'fixtures/cases.json').read_text())['fixtures']
checks=[]
for c in cs:
    got=evaluate(c)
    checks.append((c['id'],'decision',got==c['expected'],got,c['expected']))
    checks.append((c['id'],'required_fields',all(k in c for k in ['site_ref','rest_api_version','credential_scope','order_id','wc_status','mapping_version','signature_check','payload_digest','reconciliation_state','evidence_ref']),None,None))
    checks.append((c['id'],'signature_gate',not (c.get('signature_check')!='VERIFIED' and got=='ACCEPT_CONNECTOR'),None,None))
    checks.append((c['id'],'mapping_gate',not (c.get('is_custom_status') and not c.get('mapping_version_changed') and got=='ACCEPT_CONNECTOR'),None,None))
    checks.append((c['id'],'duplicate_gate',not (c.get('duplicate_effect_applied') and got=='ACCEPT_CONNECTOR'),None,None))
    checks.append((c['id'],'site_scope_gate',not (c.get('assumption_site_ref') and c.get('assumption_site_ref')!=c.get('site_ref') and got=='ACCEPT_CONNECTOR'),None,None))
failed=[x for x in checks if not x[2]]
print(f'COM-028 LAB: {len(checks)-len(failed)}/{len(checks)} PASS')
for x in failed: print('FAIL',x)
sys.exit(1 if failed else 0)
