fix: exclude provider records from source exports
This commit is contained in:
@@ -99,6 +99,7 @@ class OrganizationSourceRecordExportApiV2Test(APITestCase):
|
||||
inn="7707083810",
|
||||
ogrn="1027700132010",
|
||||
kpp="770701001",
|
||||
okpo="12345678",
|
||||
)
|
||||
inspection_extension = PlannedInspectionExtension.objects.create(
|
||||
organization=organization,
|
||||
@@ -176,16 +177,17 @@ class OrganizationSourceRecordExportApiV2Test(APITestCase):
|
||||
worksheet = workbook["data"]
|
||||
rows = list(worksheet.iter_rows(values_only=True))
|
||||
self.assertEqual(
|
||||
rows[0][:4],
|
||||
("Наименование", "ИНН", "ОГРН", "КПП"),
|
||||
rows[0][:5],
|
||||
("Наименование", "ИНН", "ОГРН", "КПП", "ОКПО"),
|
||||
)
|
||||
self.assertEqual(
|
||||
rows[1][:4],
|
||||
rows[1][:5],
|
||||
(
|
||||
'Общество с ограниченной ответственностью "Экспорт"',
|
||||
"7707083810",
|
||||
"1027700132010",
|
||||
"770701001",
|
||||
"12345678",
|
||||
),
|
||||
)
|
||||
self.assertIn("payload.risk.score", rows[0])
|
||||
@@ -255,6 +257,7 @@ class OrganizationSourceRecordExportApiV2Test(APITestCase):
|
||||
inn="7707083811",
|
||||
ogrn="1027700132011",
|
||||
kpp="770701002",
|
||||
okpo="87654321",
|
||||
)
|
||||
extension = PlannedInspectionExtension.objects.create(
|
||||
organization=organization,
|
||||
@@ -287,9 +290,19 @@ class OrganizationSourceRecordExportApiV2Test(APITestCase):
|
||||
csv_text = csv_bytes.decode("utf-8-sig")
|
||||
csv_rows = list(csv.reader(StringIO(csv_text)))
|
||||
|
||||
self.assertEqual(csv_rows[0][:4], ["Наименование", "ИНН", "ОГРН", "КПП"])
|
||||
self.assertEqual(
|
||||
csv_rows[1][:4], ['ООО "CSV"', "7707083811", "1027700132011", "770701002"]
|
||||
csv_rows[0][:5],
|
||||
["Наименование", "ИНН", "ОГРН", "КПП", "ОКПО"],
|
||||
)
|
||||
self.assertEqual(
|
||||
csv_rows[1][:5],
|
||||
[
|
||||
'ООО "CSV"',
|
||||
"7707083811",
|
||||
"1027700132011",
|
||||
"770701002",
|
||||
"87654321",
|
||||
],
|
||||
)
|
||||
self.assertIn("payload.nested.value", csv_rows[0])
|
||||
|
||||
@@ -348,8 +361,8 @@ class OrganizationSourceRecordExportApiV2Test(APITestCase):
|
||||
2,
|
||||
)
|
||||
self.assertEqual(
|
||||
next(second_workbook["data"].iter_rows(values_only=True))[:4],
|
||||
("Наименование", "ИНН", "ОГРН", "КПП"),
|
||||
next(second_workbook["data"].iter_rows(values_only=True))[:5],
|
||||
("Наименование", "ИНН", "ОГРН", "КПП", "ОКПО"),
|
||||
)
|
||||
|
||||
selected_artifacts = [
|
||||
@@ -376,6 +389,88 @@ class OrganizationSourceRecordExportApiV2Test(APITestCase):
|
||||
self.assertEqual(package.files_count, 2)
|
||||
self.assertFalse((Path(self.export_directory.name) / "tmp").exists())
|
||||
|
||||
def test_prepared_files_include_okpo_and_exclude_provider_records(self):
|
||||
organization = Organization.objects.create(
|
||||
name='ООО "Публичная выгрузка"',
|
||||
inn="7707083888",
|
||||
ogrn="1027700132088",
|
||||
kpp="770701008",
|
||||
okpo="11223344",
|
||||
)
|
||||
extension = PlannedInspectionExtension.objects.create(
|
||||
organization=organization,
|
||||
title="Плановые проверки Генпрокуратуры России",
|
||||
)
|
||||
source_record = OrganizationSourceRecord.objects.create(
|
||||
extension=extension,
|
||||
record_type="inspection",
|
||||
source="checko",
|
||||
external_id="checko-inspection:123",
|
||||
title="Запись Checko",
|
||||
url="https://api.checko.ru/v2/inspections/123",
|
||||
payload={
|
||||
"provider": "Checko",
|
||||
"provider_alias": "Чеко",
|
||||
"provider_url": "https://checko.ru/company/123",
|
||||
"checkout_marker": "checkout_sha",
|
||||
},
|
||||
)
|
||||
included_record = OrganizationSourceRecord.objects.create(
|
||||
extension=extension,
|
||||
record_type="inspection",
|
||||
source="official-registry",
|
||||
external_id="inspection:456",
|
||||
title="Официальная запись",
|
||||
payload={"checkout_marker": "checkout_sha"},
|
||||
)
|
||||
|
||||
with TemporaryDirectory() as temporary_directory:
|
||||
export_directory = Path(temporary_directory)
|
||||
spool_path = export_directory / "rows.json"
|
||||
headers, records_count = _spool_source_group_rows(
|
||||
source_group=SourceGroup.PLANNED_INSPECTIONS.value,
|
||||
output_path=spool_path,
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
headers[:5],
|
||||
["Наименование", "ИНН", "ОГРН", "КПП", "ОКПО"],
|
||||
)
|
||||
self.assertEqual(records_count, 1)
|
||||
spooled_rows = json.loads(spool_path.read_text(encoding="utf-8"))
|
||||
self.assertEqual(spooled_rows[0]["ОКПО"], "11223344")
|
||||
self.assertEqual(spooled_rows[0]["uid"], str(included_record.uid))
|
||||
self.assertEqual(spooled_rows[0]["payload.checkout_marker"], "checkout_sha")
|
||||
|
||||
for file_format in ("json", "csv", "xlsx"):
|
||||
artifact_path = export_directory / f"artifact.{file_format}"
|
||||
_render_source_group_artifact(
|
||||
row_spool_path=spool_path,
|
||||
output_path=artifact_path,
|
||||
headers=headers,
|
||||
file_format=file_format,
|
||||
records_count=records_count,
|
||||
)
|
||||
if file_format == "json":
|
||||
exported_values = json.loads(
|
||||
artifact_path.read_text(encoding="utf-8")
|
||||
)
|
||||
elif file_format == "csv":
|
||||
with artifact_path.open(
|
||||
encoding="utf-8-sig",
|
||||
newline="",
|
||||
) as csv_file:
|
||||
exported_values = list(csv.reader(csv_file))
|
||||
else:
|
||||
workbook = load_workbook(artifact_path, read_only=True)
|
||||
exported_values = list(workbook["data"].iter_rows(values_only=True))
|
||||
self.assertNotIn(str(source_record.uid), str(exported_values))
|
||||
self.assertIn(str(included_record.uid), str(exported_values))
|
||||
|
||||
source_record.refresh_from_db()
|
||||
self.assertEqual(source_record.source, "checko")
|
||||
self.assertEqual(source_record.payload["provider"], "Checko")
|
||||
|
||||
def test_nightly_export_clears_model_ordering_to_avoid_multi_million_row_sort(self):
|
||||
queryset = _source_group_queryset(SourceGroup.GOVERNMENT_PROCUREMENTS.value)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user