import json, unittest, subprocess, sys
from pathlib import Path
ROOT=Path(__file__).resolve().parents[2]
class AssetsTest(unittest.TestCase):
 def test_bilingual_contract_work_choices_and_city(self):
  for lang in ['en','fr']:
   contract=json.loads((ROOT/'resources/imm'/f'imm5710-contract.{lang}.json').read_text(encoding='utf8'))
   fields=contract['fields']; self.assertGreater(len(fields),180)
   self.assertEqual(set(fields['form1.Page3.DetailsOfWork.Purpose.Type']['choices']),set(['LMOS','ELMO','OWP','PGWP','COWP','VWOWP','LCP','SBC','Other']))
   self.assertEqual(fields['form1.Page3.DetailsOfWork.Location.City']['city_choices']['ON']['3812'],'Toronto')
   self.assertEqual(contract['unmapped_visible_fields'],[])
 def test_generator_is_idempotent_and_preserves_existing_workhub_sections(self):
  seed=ROOT/'database/data/work_permit_hub_questionnaire.json'
  before=seed.read_bytes()
  subprocess.run([sys.executable,str(ROOT/'resources/imm/build_imm5710_assets.py')],check=True,capture_output=True)
  self.assertEqual(seed.read_bytes(),before)
 def test_application_options_and_status_source_are_exact(self):
  catalog=json.loads((ROOT/'database/data/work_permit_hub_questionnaire.json').read_text(encoding='utf8'))
  section=next(s for s in catalog['sections'] if s['source_key']=='work_permit_hub.imm5710')
  questions={q['source_key'].split('work_permit_hub.imm5710.')[1]:q for q in section['questions']}
  self.assertEqual({o['value'] for o in questions['application_options']['options']},{'same_employer','new_employer','restore','trp'})
  self.assertNotIn('has_pal',questions)
  self.assertIn('original_entry_confirmed',questions)
  self.assertTrue(all(q['label_fr'] for q in questions.values()))
  rows=json.loads((ROOT/'resources/imm/maps/imm5710.json').read_text(encoding='utf8'))['fields']
  status=next(r for r in rows if r['source'].endswith('.current_status_from'))
  self.assertEqual(status['fallback'],[])
 def test_confirmation_is_case_compatible_and_isolated(self):
  catalog=json.loads((ROOT/'database/data/work_permit_hub_questionnaire.json').read_text(encoding='utf8'))
  section=next(s for s in catalog['sections'] if s['source_key']=='work_permit_hub.imm5710')
  self.assertEqual(section['title'],'Your Work Permit Application Inside Canada')
  for q in section['questions']:
   if q['source_key'].endswith('.is_imm5710_application'):continue
   gate=q['visibility_rule']['all'][0]
   self.assertEqual(gate,{'field':'work_permit_hub.imm5710.is_imm5710_application','op':'in','value':['Yes','yes']})
if __name__=='__main__':unittest.main()
