import json,copy,unittest
from pathlib import Path
from compare import compare
class Mutations(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        p=Path(__file__).parent;cls.b=json.loads((p/'green-evidence-B.json').read_text());cls.c=json.loads((p/'green-evidence-C.json').read_text())
    def test_real(self):compare(self.b,self.c)
    def test_mutations(self):
        def pal_type(x):x['cases'][3]['body']['data']['detail']['pla'][0]['pal']=1.25
        def pal_zero(x):x['cases'][3]['body']['data']['detail']['pla'][1]['pal']='1.5'
        def strength(x):x['cases'][3]['body']['data']['detail']['pla'][0]['strength']='2'
        def order(x):x['cases'][3]['body']['data']['detail']['pla'].reverse()
        def csv(x):x['cases'][3]['body']['data']['detail']['staff_id']=[1]
        def id_zero(x):x['cases'][2]['body']['data']['id']=1
        def staff_scope(x):x['cases'][0]['body']['data']['list'][0]['gender']=2
        def checked(x):x['cases'][8]['body']['data']['detail'][0]['checked']='0'
        def key(x):x['cases'][3]['body']['data']['detail'].pop('store_id')
        def retained(x):x['retention']['fresh_counts']['athlete_pal']=5
        def time(x):x['independent_final_original']['business_datetime_HTTP_windows_verified']=False
        def fk(x):x['independent_final_original']['exact_all_PK_and_user_staff_master_pal_health_ownership_verified']=False
        def dml(x):x['read_only_green']['new_DML']=1
        def scope(x):x['write_audit'][0]['owned_scope_verified']=False
        def warning(x):x['events'][0]['fingerprint_lexical_warning']=True
        def source(x):x['loaded_boundary']['config_service_sha']='old'
        for f in (pal_type,pal_zero,strength,order,csv,id_zero,staff_scope,checked,key,retained,time,fk,dml,scope,warning,source):
            x=copy.deepcopy(self.c);f(x)
            with self.subTest(mutation=f.__name__),self.assertRaises(AssertionError):compare(self.b,x)
if __name__=='__main__':unittest.main()
