feat(organizations): migrate source storage to polymorphic records
This commit is contained in:
150
tests/apps/organizations/test_source_extensions_models.py
Normal file
150
tests/apps/organizations/test_source_extensions_models.py
Normal file
@@ -0,0 +1,150 @@
|
||||
"""Tests for organization source extension models."""
|
||||
|
||||
from django.db import IntegrityError, transaction
|
||||
from django.test import TestCase
|
||||
from organizations.models import (
|
||||
Organization,
|
||||
OrganizationSourceExtension,
|
||||
OrganizationSourceFinancialLine,
|
||||
OrganizationSourceRecord,
|
||||
PlannedInspectionExtension,
|
||||
SourceGroup,
|
||||
)
|
||||
|
||||
|
||||
class OrganizationIdentityFieldsTest(TestCase):
|
||||
"""Checks derived organization identity quality fields."""
|
||||
|
||||
def test_name_only_organization_is_marked_as_missing_identity(self):
|
||||
organization = Organization.objects.create(name="Без реквизитов")
|
||||
|
||||
self.assertEqual(organization.identity_status, Organization.IdentityStatus.MISSING)
|
||||
self.assertTrue(organization.primary_identity.startswith("name:"))
|
||||
|
||||
def test_inn_and_ogrn_organization_is_marked_as_complete_identity(self):
|
||||
organization = Organization.objects.create(
|
||||
name='ООО "Полная"',
|
||||
inn="7707083893",
|
||||
kpp="770701001",
|
||||
ogrn="1027700132195",
|
||||
)
|
||||
|
||||
self.assertEqual(organization.identity_status, Organization.IdentityStatus.COMPLETE)
|
||||
self.assertEqual(organization.primary_identity, "inn:7707083893:kpp:770701001")
|
||||
|
||||
def test_single_identifier_organization_is_marked_as_partial_identity(self):
|
||||
organization = Organization.objects.create(
|
||||
name='ООО "Частичная"',
|
||||
inn="7707083894",
|
||||
)
|
||||
|
||||
self.assertEqual(organization.identity_status, Organization.IdentityStatus.PARTIAL)
|
||||
self.assertEqual(organization.primary_identity, "inn:7707083894")
|
||||
|
||||
|
||||
class OrganizationSourceExtensionModelTest(TestCase):
|
||||
"""Checks polymorphic source extension behavior and constraints."""
|
||||
|
||||
def test_polymorphic_query_returns_concrete_extension_instance(self):
|
||||
organization = Organization.objects.create(
|
||||
name='ООО "Проверки"',
|
||||
inn="7707083895",
|
||||
ogrn="1027700132196",
|
||||
)
|
||||
extension = PlannedInspectionExtension.objects.create(
|
||||
organization=organization,
|
||||
title="Плановые проверки Генпрокуратуры России",
|
||||
records_count=1,
|
||||
last_load_batch=77,
|
||||
)
|
||||
|
||||
loaded = OrganizationSourceExtension.objects.get(uid=extension.uid)
|
||||
|
||||
self.assertIsInstance(loaded, PlannedInspectionExtension)
|
||||
self.assertEqual(loaded.source_group, SourceGroup.PLANNED_INSPECTIONS)
|
||||
self.assertEqual(loaded.organization, organization)
|
||||
|
||||
def test_one_source_group_extension_per_organization(self):
|
||||
organization = Organization.objects.create(
|
||||
name='ООО "Дубликат"',
|
||||
inn="7707083896",
|
||||
ogrn="1027700132197",
|
||||
)
|
||||
PlannedInspectionExtension.objects.create(
|
||||
organization=organization,
|
||||
title="Плановые проверки Генпрокуратуры России",
|
||||
)
|
||||
|
||||
with self.assertRaises(IntegrityError), transaction.atomic():
|
||||
PlannedInspectionExtension.objects.create(
|
||||
organization=organization,
|
||||
title="Плановые проверки Генпрокуратуры России",
|
||||
)
|
||||
|
||||
def test_source_records_are_unique_by_legacy_model_and_pk(self):
|
||||
organization = Organization.objects.create(
|
||||
name='ООО "Запись"',
|
||||
inn="7707083897",
|
||||
ogrn="1027700132198",
|
||||
)
|
||||
extension = PlannedInspectionExtension.objects.create(
|
||||
organization=organization,
|
||||
title="Плановые проверки Генпрокуратуры России",
|
||||
)
|
||||
OrganizationSourceRecord.objects.create(
|
||||
extension=extension,
|
||||
record_type="inspection",
|
||||
source="inspections",
|
||||
external_id="inspection-1",
|
||||
title="Проверка 1",
|
||||
legacy_model="apps.parsers.InspectionRecord",
|
||||
legacy_pk="1",
|
||||
payload={"registration_number": "inspection-1"},
|
||||
)
|
||||
|
||||
with self.assertRaises(IntegrityError), transaction.atomic():
|
||||
OrganizationSourceRecord.objects.create(
|
||||
extension=extension,
|
||||
record_type="inspection",
|
||||
source="inspections",
|
||||
external_id="inspection-2",
|
||||
title="Проверка 2",
|
||||
legacy_model="apps.parsers.InspectionRecord",
|
||||
legacy_pk="1",
|
||||
payload={"registration_number": "inspection-2"},
|
||||
)
|
||||
|
||||
def test_financial_lines_attach_to_source_record(self):
|
||||
organization = Organization.objects.create(
|
||||
name='ООО "Финансы"',
|
||||
inn="7707083898",
|
||||
ogrn="1027700132199",
|
||||
)
|
||||
extension = OrganizationSourceExtension.objects.create(
|
||||
organization=organization,
|
||||
source_group=SourceGroup.FINANCIAL_INDICATORS,
|
||||
title="Финансово-экономические показатели",
|
||||
)
|
||||
record = OrganizationSourceRecord.objects.create(
|
||||
extension=extension,
|
||||
record_type="financial_report",
|
||||
source="fns_reports",
|
||||
external_id="report-1",
|
||||
title="Отчетность ФНС",
|
||||
legacy_model="apps.parsers.FinancialReport",
|
||||
legacy_pk="1",
|
||||
payload={"external_id": "report-1"},
|
||||
)
|
||||
|
||||
OrganizationSourceFinancialLine.objects.create(
|
||||
source_record=record,
|
||||
form_code="1",
|
||||
line_code="1100",
|
||||
line_name="Нематериальные активы",
|
||||
year=2025,
|
||||
period_start=100,
|
||||
period_end=200,
|
||||
)
|
||||
|
||||
self.assertEqual(record.financial_lines.count(), 1)
|
||||
self.assertEqual(record.financial_lines.get().period_end, 200)
|
||||
Reference in New Issue
Block a user