fix: resolve parser organizations from directory only
Some checks failed
CI/CD Pipeline / Quality Gate (push) Failing after 32s
CI/CD Pipeline / Build and Push Images (push) Has been skipped
CI/CD Pipeline / Internal Notify (push) Successful in 0s
CI/CD Pipeline / Deploy Dev via Compose (push) Has been skipped

This commit is contained in:
2026-06-07 16:28:57 +02:00
parent 6ba8fa8d88
commit 802257a757
19 changed files with 184 additions and 83 deletions

View File

@@ -35,6 +35,10 @@ from tests.apps.parsers.factories import (
ManufacturerRecordFactory,
ParserLoadLogFactory,
)
from tests.apps.parsers.organization_helpers import (
create_directory_organization,
get_or_create_directory_organization,
)
from tests.apps.user.factories import UserFactory
from tests.utils.fixtures import fake
@@ -46,7 +50,7 @@ def _digits(length: int) -> str:
def RegisterOrganizationFactory(**kwargs) -> Organization:
kwargs.setdefault("name", kwargs.get("pn_name") or fake.company())
kwargs.setdefault("okpo", kwargs.get("mn_okpo") or _digits(8))
return Organization.objects.create(**kwargs)
return create_directory_organization(**kwargs)
def RegistryMembershipPeriodFactory(
@@ -113,7 +117,7 @@ def _save_source_record(
if ogrn:
query["ogrn"] = ogrn
if not Organization.objects.filter(**query).exists():
Organization.objects.create(
create_directory_organization(
name=organization_name,
inn=inn,
ogrn=ogrn,
@@ -122,7 +126,7 @@ def _save_source_record(
rn_key = organization_name or title or external_id
rn = str(int(hashlib.sha256(rn_key.encode()).hexdigest()[:12], 16) % 10**12)
payload.setdefault("rn", rn)
Organization.objects.get_or_create(
get_or_create_directory_organization(
rn=rn,
defaults={"name": organization_name},
)
@@ -281,7 +285,7 @@ class ParsersViewSetTest(APITestCase):
def test_procurements_v1_enriches_missing_customer_fields_from_canonical_organization(
self,
):
organization = Organization.objects.create(
organization = create_directory_organization(
name='ООО "КАНОНИЧЕСКИЙ ЗАКАЗЧИК"',
inn="7701000101",
kpp="770101001",
@@ -323,13 +327,13 @@ class ParsersViewSetTest(APITestCase):
self.assertEqual(detail_row["customer_ogrn"], organization.ogrn)
def test_procurements_v1_uses_customer_kpp_for_branch_enrichment(self):
head = Organization.objects.create(
head = create_directory_organization(
name='ООО "КАНОНИЧЕСКИЙ ЗАКАЗЧИК"',
inn="7701000101",
kpp="770101001",
ogrn="1027700000001",
)
branch = Organization.objects.create(
branch = create_directory_organization(
name='ООО "КАНОНИЧЕСКИЙ ЗАКАЗЧИК" ФИЛИАЛ',
inn=head.inn,
kpp="780101001",
@@ -361,13 +365,13 @@ class ParsersViewSetTest(APITestCase):
self.assertEqual(response.data["customer_kpp"], branch.kpp)
def test_procurements_v1_does_not_guess_branch_when_customer_kpp_is_missing(self):
head = Organization.objects.create(
head = create_directory_organization(
name='ООО "КАНОНИЧЕСКИЙ ЗАКАЗЧИК"',
inn="7701000101",
kpp="770101001",
ogrn="1027700000001",
)
Organization.objects.create(
create_directory_organization(
name='ООО "КАНОНИЧЕСКИЙ ЗАКАЗЧИК" ФИЛИАЛ',
inn=head.inn,
kpp="780101001",
@@ -479,7 +483,7 @@ class ParsersViewSetTest(APITestCase):
def test_parser_results_v1_enrich_missing_organization_fields_without_contract_change(
self,
):
organization = Organization.objects.create(
organization = create_directory_organization(
name='ООО "КАНОНИЧЕСКИЙ ПОСТАВЩИК"',
inn="7701000102",
kpp="770102001",
@@ -1199,7 +1203,7 @@ class ParsersViewSetTest(APITestCase):
failed_dir = os.path.join(tmpdir, "failed")
content = _build_fns_excel_bytes()
ogrn = _digits(13)
Organization.objects.create(name=f"ФНС {ogrn}", ogrn=ogrn)
create_directory_organization(name=f"ФНС {ogrn}", ogrn=ogrn)
upload = SimpleUploadedFile(
f"fin_{_digits(5)}_{ogrn}.xlsx",
content,
@@ -1226,7 +1230,7 @@ class ParsersViewSetTest(APITestCase):
failed_dir = os.path.join(tmpdir, "failed")
content = _build_fns_excel_bytes()
ogrn = _digits(13)
Organization.objects.create(name=f"ФНС {ogrn}", ogrn=ogrn)
create_directory_organization(name=f"ФНС {ogrn}", ogrn=ogrn)
upload = SimpleUploadedFile(
f"fin_{_digits(5)}_{ogrn}.xlsx",
content,
@@ -1250,7 +1254,7 @@ class ParsersViewSetTest(APITestCase):
self.client.force_authenticate(self.admin)
external_id = _digits(5)
ogrn = _digits(13)
Organization.objects.create(name=f"ФНС {ogrn}", ogrn=ogrn)
create_directory_organization(name=f"ФНС {ogrn}", ogrn=ogrn)
filename = f"fin_{external_id}_{ogrn}.xlsx"
upload = SimpleUploadedFile(
"fns_reports.zip",