"""Synthetic read-only parity checks, not a production migration benchmark."""
import json
ORDERS=[{'id':'O1','account':'A','code':'ORD-100','text':'filter','status':'open'}, {'id':'O2','account':'B','code':'ORD-101','text':'filter','status':'open'}, {'id':'O3','account':'A','code':'ORD-102','text':'cable','status':'cancelled'}, {'id':'O4','account':'A','code':'ORD-103','text':'filter','status':'open'}]
CASES=[('A-filter-open','A','filter','open'),('A-cable-all','A','cable',None),('B-filter-all','B','filter',None),('A-cancelled','A','', 'cancelled'),('A-search-B-code','A','ORD-101',None),('A-all','A','',None)]
def search(account,term,status,apply_permissions=True,reverse=False):
 out=[o for o in ORDERS if (not apply_permissions or o['account']==account) and term.casefold() in (o['code']+' '+o['text']).casefold() and (status is None or o['status']==status)]
 return sorted(out,key=lambda o:o['id'],reverse=reverse)
def compare(account,old,new):
 old_ids=[o['id'] for o in old];new_ids=[o['id'] for o in new]
 leaked=[o['id'] for o in new if o['account']!=account]
 return {'old':old_ids,'new':new_ids,'gained':sorted(set(new_ids)-set(old_ids)),'lost':sorted(set(old_ids)-set(new_ids)),'leaked':leaked,'order_changed':set(old_ids)==set(new_ids) and old_ids!=new_ids}
results=[]
for name,account,term,status in CASES:
 old=search(account,term,status);bad=search(account,term,status,False,True);fixed=search(account,term,status,True,True)
 bad_diff=compare(account,old,bad);good_diff=compare(account,old,fixed)
 assert not good_diff['leaked'] and not good_diff['gained'] and not good_diff['lost']
 results.append({'case':name,'buggy':bad_diff,'fixed':good_diff})
assert results[0]['buggy']['leaked']==['O2']
assert results[4]['buggy']['new']==['O2'] and results[4]['fixed']['new']==[]
assert results[0]['fixed']['order_changed']
report={'allAssertionsPassed':True,'cases':results,'limits':['Four invented records and six local read queries only.','No latency, live authorisation, replication or production routing measured.','Order differences are demonstrated, not automatically approved.','Pagination and write migration are outside this fixture.']}
if __name__=='__main__':print(json.dumps(report,indent=2))
