from pathlib import Path
import json
R=Path(__file__).resolve().parent
cases=json.loads((R/'fixtures/cases.json').read_text(encoding='utf-8'))['cases']
assert len(cases)==8
required={'id','release_id','manifest_version','manifest_digest','manifest_digest_verified','exact_asset_set_changed','claim_set_ref','claim_set_status','assets','provenance'}
asset_required={'role','logical_name','media_type','expected_size','expected_digest','mutable_locator','source_binding_ref','source_binding_status','rights_decision_ref','rights_status','approval_validity_ref','approval_status','required','present'}
for case in cases:
    assert required.issubset(case), (case.get('id'), sorted(required-set(case)))
    assert case['assets']
    for asset in case['assets']:
        assert asset_required.issubset(asset), (case['id'], asset.get('logical_name'))
print('PASS 8/8 learner fixtures structurally valid')
