def test_goods_nomenclature_successor_importer_create( run_xml_import, date_ranges, ): good = factories.GoodsNomenclatureFactory( update_type=UpdateType.CREATE.value, valid_between=date_ranges.normal, ) successor = factories.GoodsNomenclatureFactory( update_type=UpdateType.CREATE.value, valid_between=date_ranges.adjacent_later, ) run_xml_import( lambda: factories.GoodsNomenclatureSuccessorFactory.build( replaced_goods_nomenclature=good, absorbed_into_goods_nomenclature=successor, update_type=UpdateType.CREATE.value, ), serializers.GoodsNomenclatureSuccessorSerializer, ) db_link = models.GoodsNomenclatureSuccessor.objects.get( replaced_goods_nomenclature__sid=good.sid, ) assert db_link db_good = models.GoodsNomenclature.objects.get(sid=good.sid) assert db_good.successors.get() == successor
def test_goods_nomenclature_successor_importer_create(valid_user, date_ranges): good = factories.GoodsNomenclatureFactory( update_type=UpdateType.CREATE.value, valid_between=date_ranges.normal, ) successor = factories.GoodsNomenclatureFactory( update_type=UpdateType.CREATE.value, valid_between=date_ranges.adjacent_later, ) successor_link = factories.GoodsNomenclatureSuccessorFactory.build( replaced_goods_nomenclature=good, absorbed_into_goods_nomenclature=successor, update_type=UpdateType.CREATE.value, ) xml = generate_test_import_xml( serializers.GoodsNomenclatureSuccessorSerializer( successor_link, context={"format": "xml"}, ).data, ) process_taric_xml_stream( xml, username=valid_user.username, status=WorkflowStatus.PUBLISHED.value, ) db_link = models.GoodsNomenclatureSuccessor.objects.get( replaced_goods_nomenclature__sid=good.sid, ) assert db_link db_good = models.GoodsNomenclature.objects.get(sid=good.sid) assert db_good.successors.get() == successor
def test_goods_nomenclature_successor_importer_delete(valid_user, date_ranges): good = factories.GoodsNomenclatureFactory( update_type=UpdateType.CREATE.value, valid_between=date_ranges.normal, ) successor = factories.GoodsNomenclatureFactory( update_type=UpdateType.CREATE.value, valid_between=date_ranges.adjacent_later, ) factories.GoodsNomenclatureSuccessorFactory( replaced_goods_nomenclature=good, absorbed_into_goods_nomenclature=successor, update_type=UpdateType.CREATE.value, ) updated_good = factories.GoodsNomenclatureFactory( sid=good.sid, item_id=good.item_id, suffix=good.suffix, version_group=good.version_group, update_type=UpdateType.UPDATE.value, valid_between=date_ranges.no_end, ) successor_link = factories.GoodsNomenclatureSuccessorFactory.build( replaced_goods_nomenclature=updated_good, absorbed_into_goods_nomenclature=successor, update_type=UpdateType.DELETE.value, ) xml = generate_test_import_xml( serializers.GoodsNomenclatureSuccessorSerializer( successor_link, context={"format": "xml"}, ).data, ) process_taric_xml_stream( xml, username=valid_user.username, status=WorkflowStatus.PUBLISHED.value, ) db_link = models.GoodsNomenclatureSuccessor.objects.filter( replaced_goods_nomenclature__sid=good.sid, ) assert not db_link.latest_approved().exists() assert db_link.latest_deleted().exists()
def test_commodity_code_change_performs_DELETE_and_CREATE( GoodsNomenclatureFactory): goods_nomenclature = (GoodsNomenclatureFactory() if GoodsNomenclatureFactory else None) measure = factories.MeasureFactory.create( goods_nomenclature=goods_nomenclature) new_nomenclature = factories.GoodsNomenclatureFactory() assert Measure.objects.count() == 1 factories.MeasureFactory.create( version_group=measure.version_group, update_type=UpdateType.UPDATE, goods_nomenclature=new_nomenclature, ) deleted_measure = Measure.objects.filter( update_type=UpdateType.DELETE).first() created_measure = Measure.objects.filter( goods_nomenclature=new_nomenclature, update_type=UpdateType.CREATE, ).first() assert deleted_measure is not None assert created_measure is not None assert Measure.objects.count() == 3
def measure_data(date_ranges) -> Dict: return { "duty_sentence": "0.00 %", "geographical_area": factories.GeographicalAreaFactory(), "goods_nomenclature": factories.GoodsNomenclatureFactory(), "measure_type": factories.MeasureTypeFactory(), "validity_start": date_ranges.no_end.lower, "validity_end": date_ranges.no_end.upper, }
def test_starts_on_nomenclature_start( measure_data, date_ranges: Dates, measure_creation_pattern: MeasureCreationPattern, ): measure_data["goods_nomenclature"] = factories.GoodsNomenclatureFactory( valid_between=date_ranges.adjacent_later, ) measure = measure_creation_pattern.create(**measure_data) assert measure.valid_between.lower == date_ranges.adjacent_later.lower
def test_ends_on_nomenclature_end( measure_data, date_ranges: Dates, measure_creation_pattern: MeasureCreationPattern, ): measure_data["goods_nomenclature"] = factories.GoodsNomenclatureFactory( valid_between=date_ranges.starts_with_normal, ) measure = measure_creation_pattern.create(**measure_data) assert measure.valid_between.upper == date_ranges.starts_with_normal.upper
def test_starts_on_minimum_date( measure_data, date_ranges: Dates, measure_creation_pattern: MeasureCreationPattern, ): measure_data["validity_start"] = date_ranges.no_end_before( date_ranges.now).lower measure_data["goods_nomenclature"] = factories.GoodsNomenclatureFactory( valid_between=TaricDateRange(date_ranges.now, None), ) measure = measure_creation_pattern.create(**measure_data) assert measure.valid_between.lower == date_ranges.now
def test_goods_nomenclature_successor_importer_delete( run_xml_import, date_ranges, ): good = factories.GoodsNomenclatureFactory( update_type=UpdateType.CREATE.value, valid_between=date_ranges.normal, ) successor = factories.GoodsNomenclatureFactory( update_type=UpdateType.CREATE.value, valid_between=date_ranges.adjacent_later, ) factories.GoodsNomenclatureSuccessorFactory( replaced_goods_nomenclature=good, absorbed_into_goods_nomenclature=successor, update_type=UpdateType.CREATE.value, ) updated_good = factories.GoodsNomenclatureFactory( sid=good.sid, item_id=good.item_id, suffix=good.suffix, version_group=good.version_group, update_type=UpdateType.UPDATE.value, valid_between=date_ranges.no_end, ) run_xml_import( lambda: factories.GoodsNomenclatureSuccessorFactory.build( replaced_goods_nomenclature=updated_good, absorbed_into_goods_nomenclature=successor, update_type=UpdateType.DELETE.value, ), serializers.GoodsNomenclatureSuccessorSerializer, ) db_link = models.GoodsNomenclatureSuccessor.objects.filter( replaced_goods_nomenclature__sid=good.sid, ) assert not db_link.latest_approved().exists() assert db_link.latest_deleted().exists()