def test_multiple_rules_documents(self): rules_document = mixer.blend(RulesDocument) rules_document_chapter_rule = mixer.blend( Rule, hs_from="01", hs_to=None, is_exclusion=False, rules_document=rules_document, rule_text=mixer.RANDOM, ) other_rules_document = mixer.blend(RulesDocument) other_rules_document_chapter_rule = mixer.blend( Rule, hs_from="01", hs_to=None, is_exclusion=False, rules_document=other_rules_document, rule_text=mixer.RANDOM, ) rules_of_origin = get_rules_of_origin(rules_document, "01") self.assertCountEqual(rules_of_origin, [rules_document_chapter_rule]) rules_of_origin = get_rules_of_origin(other_rules_document, "01") self.assertCountEqual(rules_of_origin, [other_rules_document_chapter_rule])
def test_ex_rules_ranged_overlap(self): rules_document = mixer.blend(RulesDocument) chapter_rule = mixer.blend( Rule, code="chapter_rule", hs_from="01", hs_to="02", is_exclusion=True, rules_document=rules_document, rule_text=mixer.RANDOM, ) heading_rule = mixer.blend( Rule, code="heading_rule", hs_from="0105", hs_to="0205", is_exclusion=True, rules_document=rules_document, rule_text=mixer.RANDOM, ) subheading_rule = mixer.blend( Rule, code="subheading_rule", hs_from="010505", hs_to="020505", is_exclusion=True, rules_document=rules_document, rule_text=mixer.RANDOM, ) rules_of_origin = get_rules_of_origin(rules_document, "01") self.assertCountEqual(rules_of_origin, [chapter_rule]) rules_of_origin = get_rules_of_origin(rules_document, "02") self.assertCountEqual(rules_of_origin, [chapter_rule, heading_rule, subheading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "0110") self.assertCountEqual(rules_of_origin, [chapter_rule, heading_rule, subheading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "0205") self.assertCountEqual(rules_of_origin, [chapter_rule, heading_rule, subheading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "020505") self.assertCountEqual(rules_of_origin, [chapter_rule, heading_rule, subheading_rule])
def test_non_ex_rules_directly_applied_to_commodity_code(self): rules_document = mixer.blend(RulesDocument) rule_01 = mixer.blend( Rule, hs_from="01", hs_to=None, is_exclusion=False, rules_document=rules_document, rule_text=mixer.RANDOM, ) rule_02 = mixer.blend( Rule, hs_from="02", hs_to=None, is_exclusion=False, rules_document=rules_document, rule_text=mixer.RANDOM, ) rule_03 = mixer.blend( Rule, hs_from="03", hs_to=None, is_exclusion=False, rules_document=rules_document, rule_text=mixer.RANDOM, ) another_rule_03 = mixer.blend( Rule, hs_from="03", hs_to=None, is_exclusion=False, rules_document=rules_document, rule_text=mixer.RANDOM, ) rules_of_origin = get_rules_of_origin(rules_document, "01") self.assertCountEqual(rules_of_origin, [rule_01]) rules_of_origin = get_rules_of_origin(rules_document, "02") self.assertCountEqual(rules_of_origin, [rule_02]) rules_of_origin = get_rules_of_origin(rules_document, "03") self.assertCountEqual(rules_of_origin, [another_rule_03, rule_03]) rules_of_origin = get_rules_of_origin(rules_document, "04") self.assertCountEqual(rules_of_origin, [])
def test_non_ex_rule_with_leading_rule(self): # A leading rule is one without `rule_text` rules_document = mixer.blend(RulesDocument) chapter_rule = mixer.blend( Rule, code="chapter_rule", hs_from="01", hs_to=None, is_exclusion=False, rules_document=rules_document, rule_text=mixer.RANDOM, ) heading_leading_rule = mixer.blend( Rule, code="heading_leading_rule", hs_from="0101", hs_to=None, is_exclusion=False, rules_document=rules_document, rule_text=None, ) subheading_rule = mixer.blend( Rule, code="subheading_rule", hs_from="010101", hs_to=None, is_exclusion=False, rules_document=rules_document, rule_text=mixer.RANDOM, ) rules_of_origin = get_rules_of_origin(rules_document, "01") self.assertCountEqual(rules_of_origin, [chapter_rule]) rules_of_origin = get_rules_of_origin(rules_document, "0101") self.assertCountEqual(rules_of_origin, [heading_leading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "010101") self.assertCountEqual(rules_of_origin, [heading_leading_rule, subheading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "01010101") self.assertCountEqual(rules_of_origin, [heading_leading_rule, subheading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "0101010101") self.assertCountEqual(rules_of_origin, [heading_leading_rule, subheading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "010101010101") self.assertCountEqual(rules_of_origin, [heading_leading_rule, subheading_rule])
def get_rules_of_origin(self, country_code, commodity_code): if country_code == "EU": country_code = ( "FR" # pick one of the EU countries, the RoO are the same for all ) rules_documents = RulesDocument.objects.filter( countries__country_code=country_code, start_date__lte=date.today(), ) rules_of_origin = [] for rules_document in rules_documents: rules = get_rules_of_origin(rules_document, commodity_code) footnotes, relevant_footnotes = self.get_rules_footnotes( rules_document, rules) introductory_notes = self.get_rules_introductory_notes( rules_document, footnotes) rules_of_origin.append((rules_document, rules, relevant_footnotes, introductory_notes)) return rules_of_origin
def test_non_ex_rules_override_parent_rules(self): rules_document = mixer.blend(RulesDocument) chapter_rule = mixer.blend( Rule, hs_from="01", hs_to=None, is_exclusion=False, rules_document=rules_document, rule_text=mixer.RANDOM, ) heading_rule = mixer.blend( Rule, hs_from="0101", hs_to=None, is_exclusion=False, rules_document=rules_document, rule_text=mixer.RANDOM, ) subheading_rule = mixer.blend( Rule, hs_from="010101", hs_to=None, is_exclusion=False, rules_document=rules_document, rule_text=mixer.RANDOM, ) rules_of_origin = get_rules_of_origin(rules_document, "01") self.assertCountEqual(rules_of_origin, [chapter_rule]) rules_of_origin = get_rules_of_origin(rules_document, "0101") self.assertCountEqual(rules_of_origin, [heading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "010101") self.assertCountEqual(rules_of_origin, [subheading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "01010101") self.assertCountEqual(rules_of_origin, [subheading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "0101010101") self.assertCountEqual(rules_of_origin, [subheading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "010101010101") self.assertCountEqual(rules_of_origin, [subheading_rule])
def test_non_ex_rules_in_hierarchy_for_commodity_code(self): rules_document = mixer.blend(RulesDocument) rule = mixer.blend( Rule, hs_from="01", hs_to=None, is_exlusion=False, rules_document=rules_document, rule_text=mixer.RANDOM, ) rules_of_origin = get_rules_of_origin(rules_document, "01") self.assertCountEqual(rules_of_origin, [rule]) rules_of_origin = get_rules_of_origin(rules_document, "0102") self.assertCountEqual(rules_of_origin, [rule]) rules_of_origin = get_rules_of_origin(rules_document, "010203") self.assertCountEqual(rules_of_origin, [rule]) rules_of_origin = get_rules_of_origin(rules_document, "01020304") self.assertCountEqual(rules_of_origin, [rule]) rules_of_origin = get_rules_of_origin(rules_document, "0102030405") self.assertCountEqual(rules_of_origin, [rule]) rules_of_origin = get_rules_of_origin(rules_document, "010203040506") self.assertCountEqual(rules_of_origin, [rule]) rule.hs_from = "0102" rule.save() rules_of_origin = get_rules_of_origin(rules_document, "01") self.assertCountEqual(rules_of_origin, []) rules_of_origin = get_rules_of_origin(rules_document, "0102") self.assertCountEqual(rules_of_origin, [rule]) rules_of_origin = get_rules_of_origin(rules_document, "010203") self.assertCountEqual(rules_of_origin, [rule]) rules_of_origin = get_rules_of_origin(rules_document, "01020304") self.assertCountEqual(rules_of_origin, [rule]) rules_of_origin = get_rules_of_origin(rules_document, "0102030405") self.assertCountEqual(rules_of_origin, [rule]) rule.hs_from = "010203" rule.save() rules_of_origin = get_rules_of_origin(rules_document, "01") self.assertCountEqual(rules_of_origin, []) rules_of_origin = get_rules_of_origin(rules_document, "0102") self.assertCountEqual(rules_of_origin, []) rules_of_origin = get_rules_of_origin(rules_document, "010203") self.assertCountEqual(rules_of_origin, [rule]) rules_of_origin = get_rules_of_origin(rules_document, "01020304") self.assertCountEqual(rules_of_origin, [rule]) rules_of_origin = get_rules_of_origin(rules_document, "0102030405") self.assertCountEqual(rules_of_origin, [rule])
def test_ex_rules_directly_applied_overlap(self): rules_document = mixer.blend(RulesDocument) chapter_rule = mixer.blend( Rule, code="chapter_rule", hs_from="01", hs_to=None, is_exclusion=True, rules_document=rules_document, rule_text=mixer.RANDOM, ) heading_rule = mixer.blend( Rule, code="heading_rule", hs_from="0101", hs_to=None, is_exclusion=True, rules_document=rules_document, rule_text=mixer.RANDOM, ) subheading_rule = mixer.blend( Rule, code="subheading_rule", hs_from="010101", hs_to=None, is_exclusion=True, rules_document=rules_document, rule_text=mixer.RANDOM, ) rules_of_origin = get_rules_of_origin(rules_document, "01") self.assertCountEqual(rules_of_origin, [chapter_rule]) rules_of_origin = get_rules_of_origin(rules_document, "0101") self.assertCountEqual(rules_of_origin, [chapter_rule, heading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "010101") self.assertCountEqual(rules_of_origin, [chapter_rule, heading_rule, subheading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "01010101") self.assertCountEqual(rules_of_origin, [chapter_rule, heading_rule, subheading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "0101010101") self.assertCountEqual(rules_of_origin, [chapter_rule, heading_rule, subheading_rule]) rules_of_origin = get_rules_of_origin(rules_document, "010101010101") self.assertCountEqual(rules_of_origin, [chapter_rule, heading_rule, subheading_rule]) other_chapter_rule = mixer.blend( Rule, code="other_chapter_rule", hs_from="01", hs_to=None, is_exclusion=True, rules_document=rules_document, rule_text=mixer.RANDOM, ) rules_of_origin = get_rules_of_origin(rules_document, "01") self.assertCountEqual(rules_of_origin, [chapter_rule, other_chapter_rule]) rules_of_origin = get_rules_of_origin(rules_document, "0101") self.assertCountEqual(rules_of_origin, [other_chapter_rule, chapter_rule, heading_rule])
def test_no_rules_in_rules_document(self): rules_document = mixer.blend(RulesDocument) rules_of_origin = get_rules_of_origin(rules_document, "01") self.assertCountEqual(rules_of_origin, [])