from pathlib import Path
import json,sys
from gate_rules import evaluate
R=Path(__file__).resolve().parent
CASES={'fixtures/baseline.json': 'CREDENTIAL_ISSUANCE_HOLD_STATUS_VERIFICATION', 'fixtures/ready_issuance.json': 'CREDENTIAL_ISSUANCE_REVIEW_READY', 'fixtures/missing_issuer_authority.json': 'HOLD_ISSUER_AUTHORITY', 'fixtures/subject_mismatch.json': 'HOLD_SUBJECT_BINDING', 'fixtures/criteria_mismatch.json': 'HOLD_COMPETENCY_CRITERIA_MISMATCH', 'fixtures/missing_evidence.json': 'HOLD_EVIDENCE_REFS', 'fixtures/unresolved_evidence_ref.json': 'HOLD_EVIDENCE_REFS', 'fixtures/missing_mastery_snapshot.json': 'HOLD_MASTERY_SNAPSHOT', 'fixtures/missing_issuance_decision.json': 'HOLD_ISSUANCE_DECISION', 'fixtures/active_without_issued_at.json': 'HOLD_ISSUED_AT', 'fixtures/missing_status_ref.json': 'HOLD_CREDENTIAL_STATUS', 'fixtures/unsupported_proof.json': 'HOLD_VERIFICATION_METHOD', 'fixtures/privacy_overdisclosure.json': 'HOLD_PRIVACY_DISCLOSURE', 'fixtures/verification_failed.json': 'HOLD_VERIFICATION_FAILED', 'fixtures/revoked_preserve_mastery.json': 'CREDENTIAL_REVOKED_REVIEW_READY', 'fixtures/revoked_missing_reason.json': 'HOLD_REVOCATION_REASON', 'fixtures/revoked_rewrites_mastery.json': 'HOLD_MASTERY_HISTORY_MUTATION', 'fixtures/privacy_reference_ready.json': 'CREDENTIAL_ISSUANCE_REVIEW_READY', 'fixtures/missing_required_field.json': 'HOLD_INSUFFICIENT_EVIDENCE', 'transfer/transfer_rebuilt.json': 'CREDENTIAL_ISSUANCE_REVIEW_READY', 'transfer/transfer_not_rebuilt.json': 'HOLD_MAPPING_NOT_REBUILT', 'transfer/transfer_unauthorized_issuer.json': 'HOLD_ISSUER_AUTHORITY', 'transfer/transfer_baseline_oracle_reuse.json': 'HOLD_BASELINE_ORACLE_REUSE'}
fail=[]
for rel,expected in CASES.items():
 x=json.loads((R/rel).read_text()); got=evaluate(x)['state']; print(rel,got,'PASS' if got==expected else 'FAIL')
 if got!=expected: fail.append((rel,expected,got))
print(f'passed={len(CASES)-len(fail)}/{len(CASES)}')
if fail: print(fail); sys.exit(1)
