import copy
import importlib.util
import json
from pathlib import Path
import unittest
ROOT=Path(__file__).parent
spec=importlib.util.spec_from_file_location('gift_date_verify',ROOT/'verify.py');oracle=importlib.util.module_from_spec(spec);spec.loader.exec_module(oracle)
class DateVerifierTests(unittest.TestCase):
    def test_positive(self):self.assertEqual(oracle.verify()['successful_HTTP'],12)
    def test_mutations(self):
        directory=ROOT/'private-evidence/B-green';wire=json.loads((directory/'green-single-day.wire.json').read_text());result=json.loads((directory/'green-single-day.result.json').read_text());baseline=json.loads((ROOT.parent/'store-gift-wide-http-20261011/private-evidence/body-B-red-account-positive.json').read_text())
        for field,value in [('total',0),('money',0),('biz_order_id',9007199254740992),('balance_before','0.00'),('create_time','wrong'),('nickname','other'),('extra','unexpected')]:
            changed=copy.deepcopy(wire);body=json.loads(changed['body'])
            if field=='total':body['data']['total']=value
            else:body['data']['data'][0][field]=value
            changed['body']=json.dumps(body,ensure_ascii=False,separators=(',',':'));import hashlib;changed['body_sha256']=hashlib.sha256(changed['body'].encode()).hexdigest();client=copy.deepcopy(result);client['body']=changed['body'];client['body_sha256']=changed['body_sha256']
            with self.subTest(field=field):
                with self.assertRaises(AssertionError):oracle.check_wire(changed,client,baseline,'B','green','green-single-day')
        changed=copy.deepcopy(wire)
        first=next(q for q in changed['prepared']if'COUNT(*)'in q['queryString'])
        key=next(k for k in first['bindings']if'create_time_between_1'in k);first['bindings'][key]={'value':'2001-01-01 00:00:00','type':2}
        with self.assertRaises(AssertionError):oracle.check_wire(changed,result,baseline,'B','green','green-single-day')
if __name__=='__main__':unittest.main()
