#!/usr/bin/env python3
import copy,json,unittest
from pathlib import Path
from compare import compare
p=Path(__file__).parent
B=json.loads((p/'evidence-B.json').read_text());C=json.loads((p/'evidence-C.json').read_text())
class StrictComparison(unittest.TestCase):
    def test_actual(self):self.assertEqual(compare(B,C)['actual_available_wire_pairs'],40)
    def test_mutations_rejected(self):
        edits=[
          lambda x:x['cases'].pop(),
          lambda x:x['cases'][2].update(scenario=x['cases'][3]['scenario']),
          lambda x:x['cases'][2].update(path='/store/client.wxapp.Setting/detail'),
          lambda x:x['cases'][2].update(http_status=500),
          lambda x:x['cases'][2].update(method='POST'),
          lambda x:x['cases'][2].update(actual_wire_path='/wrong'),
          lambda x:x['cases'][2].update(trace_format_valid=False),
          lambda x:x['cases'][2]['body'].update(status='200'),
          lambda x:x['cases'][2]['body'].update(data=[]),
          lambda x:x['cases'][2]['raw_json_shape'].update(object={}),
          lambda x:x['retention'].update(natural_two_table_full_sha_unchanged=False),
          lambda x:x['resources'].update(cache_files=1),
          lambda x:x['independent_final_original'].update(all_basic_disabled_and_examine_switch_zero=False),
          lambda x:x['write_audit'][0].update(owned_scope_verified=False),
          lambda x:x['events'][0].update(fingerprint_lexical_warning=True),
          lambda x:x['loaded_boundary'].update(common_h5_sha='wrong'),
          lambda x:x['cases'][2]['body']['data']['detail'].update(enabled=0),
          lambda x:x['cases'][2]['body']['data']['detail'].update(baseUrl='wrong'),
        ]
        for edit in edits:
            with self.subTest(edit=edits.index(edit)):
                bad=copy.deepcopy(C);edit(bad)
                with self.assertRaises(AssertionError):compare(B,bad)
if __name__=='__main__':unittest.main()
