from pathlib import Path from datetime import datetime, timezone import collections, csv, hashlib, json, zipfile R=Path(__file__).resolve().parent.parent P=R/'storage/app/private/investmoz-v2/portal-audit' O=R/'outputs/investmoz-operational-onboarding-20261011' load=lambda p:json.loads(p.read_text(encoding='utf-8-sig')) sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest() m=load(O/'manifesto.json');wrapper=load(O/'manifesto-disponibilizacao.json') assert wrapper['delta_sha256']==m['delta_sha256'] assert sha(O/'manifesto.json')==wrapper['original_manifest_sha256'] assert sha(O/m['package'])==m['package_sha256']==wrapper['package_sha256'] for file,value in wrapper['documents'].items(): assert sha(O/file)==value,file expected={x['path']:x['after_sha256'] for x in m['files']}|{x['path']:x['sha256'] for x in m['assets']} with zipfile.ZipFile(O/m['package']) as z: assert set(z.namelist())==set(expected) and len(z.namelist())==len(expected) for file,value in expected.items(): assert hashlib.sha256(z.read(file)).hexdigest()==value,file for x in m['files']: assert (sha(R/x['path']) if (R/x['path']).is_file() else None)==x['before_sha256'],x['path'] b=load(P/'onboarding-release-target-backup.json') assert sha(Path(b['dump_path']))==b['dump_sha256'] and sha(Path(b['files_path']))==b['files_sha256'] assert datetime.now(timezone.utc)