feat: import organization exchange v3
All checks were successful
All checks were successful
This commit is contained in:
@@ -5,7 +5,6 @@ from __future__ import annotations
|
||||
from datetime import date
|
||||
from decimal import Decimal
|
||||
|
||||
from apps.registers.models import Register, RegisterUpload, RegistryMembershipPeriod
|
||||
from django.test import override_settings
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
@@ -32,20 +31,10 @@ class OrganizationAnalyticsApiTest(APITestCase):
|
||||
financial_reports_available=True,
|
||||
tax_reports_available=True,
|
||||
bankruptcy_messages_found=False,
|
||||
)
|
||||
register = Register.objects.create(name="Реестр госкорпорации Росатом ОПК")
|
||||
upload = RegisterUpload.objects.create(
|
||||
registry=register,
|
||||
actual_date=date(2026, 4, 1),
|
||||
file_name="analytics.xlsx",
|
||||
file_hash="analytics-hash",
|
||||
rows_count=1,
|
||||
)
|
||||
RegistryMembershipPeriod.objects.create(
|
||||
registry=register,
|
||||
organization=self.organization,
|
||||
started_at=date(2026, 4, 1),
|
||||
started_by_upload=upload,
|
||||
gk_code="rosatom",
|
||||
gk_name="Госкорпорация Росатом",
|
||||
opk_registry_membership=True,
|
||||
ropk_razdel_name="Росатом ОПК",
|
||||
)
|
||||
|
||||
FormF1RecordFactory.create(
|
||||
|
||||
@@ -2,9 +2,6 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import date
|
||||
|
||||
from apps.registers.models import Register, RegisterUpload, RegistryMembershipPeriod
|
||||
from django.test import override_settings
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
@@ -24,41 +21,11 @@ class OrganizationApiTest(APITestCase):
|
||||
self.client.force_authenticate(self.user)
|
||||
|
||||
def test_list_includes_only_active_registry_names(self):
|
||||
organization = OrganizationFactory.create(
|
||||
OrganizationFactory.create(
|
||||
name="АО Альфа",
|
||||
short_name="АО «Альфа»",
|
||||
organization_type="ao",
|
||||
)
|
||||
active_register = Register.objects.create(name="Реестр ОПК")
|
||||
closed_register = Register.objects.create(name="Архивный реестр")
|
||||
active_upload = RegisterUpload.objects.create(
|
||||
registry=active_register,
|
||||
actual_date=date(2026, 3, 1),
|
||||
file_name="active.xlsx",
|
||||
file_hash="active-api-hash",
|
||||
rows_count=1,
|
||||
)
|
||||
closed_upload = RegisterUpload.objects.create(
|
||||
registry=closed_register,
|
||||
actual_date=date(2026, 2, 1),
|
||||
file_name="closed.xlsx",
|
||||
file_hash="closed-api-hash",
|
||||
rows_count=1,
|
||||
)
|
||||
|
||||
RegistryMembershipPeriod.objects.create(
|
||||
registry=active_register,
|
||||
organization=organization,
|
||||
started_at=date(2026, 3, 1),
|
||||
started_by_upload=active_upload,
|
||||
)
|
||||
RegistryMembershipPeriod.objects.create(
|
||||
registry=closed_register,
|
||||
organization=organization,
|
||||
started_at=date(2026, 2, 1),
|
||||
ended_at=date(2026, 3, 1),
|
||||
started_by_upload=closed_upload,
|
||||
ended_by_upload=closed_upload,
|
||||
opk_registry_membership=True,
|
||||
)
|
||||
|
||||
response = self.client.get("/api/v1/organizations/")
|
||||
@@ -79,24 +46,13 @@ class OrganizationApiTest(APITestCase):
|
||||
def test_detail_includes_active_registries(self):
|
||||
organization = OrganizationFactory.create(
|
||||
short_name="АО «Бета»",
|
||||
general_director_name="Иванов Иван Иванович",
|
||||
general_director_inn="123456789012",
|
||||
general_director="Иванов Иван Иванович",
|
||||
general_director_tax_id="123456789012",
|
||||
financial_reports_available=True,
|
||||
tax_reports_available=True,
|
||||
)
|
||||
register = Register.objects.create(name="Реестр Роскосмос")
|
||||
upload = RegisterUpload.objects.create(
|
||||
registry=register,
|
||||
actual_date=date(2026, 3, 1),
|
||||
file_name="detail.xlsx",
|
||||
file_hash="detail-api-hash",
|
||||
rows_count=1,
|
||||
)
|
||||
RegistryMembershipPeriod.objects.create(
|
||||
registry=register,
|
||||
organization=organization,
|
||||
started_at=date(2026, 3, 1),
|
||||
started_by_upload=upload,
|
||||
gk_code="2",
|
||||
gk_name="Роскосмос",
|
||||
in_korp_name="Организация внутри ГК",
|
||||
)
|
||||
|
||||
response = self.client.get(f"/api/v1/organizations/{organization.id}/")
|
||||
@@ -104,11 +60,11 @@ class OrganizationApiTest(APITestCase):
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data["summary"]["active_registry_names"],
|
||||
["Реестр Роскосмос"],
|
||||
["Роскосмос"],
|
||||
)
|
||||
self.assertEqual(
|
||||
response.data["active_registries"],
|
||||
[{"id": str(register.id), "name": "Реестр Роскосмос"}],
|
||||
[{"id": "2", "name": "Роскосмос"}],
|
||||
)
|
||||
self.assertEqual(response.data["corporation_scope"], "roscosmos")
|
||||
self.assertEqual(
|
||||
@@ -117,10 +73,10 @@ class OrganizationApiTest(APITestCase):
|
||||
)
|
||||
self.assertEqual(response.data["registry_category"], "other")
|
||||
self.assertEqual(response.data["registry_category_label"], "Прочие")
|
||||
self.assertEqual(
|
||||
response.data["general_director"]["full_name"],
|
||||
"Иванов Иван Иванович",
|
||||
)
|
||||
self.assertEqual(response.data["general_director"], "Иванов Иван Иванович")
|
||||
self.assertEqual(response.data["general_director_tax_id"], "123456789012")
|
||||
self.assertEqual(response.data["gk_name"], "Роскосмос")
|
||||
self.assertEqual(response.data["in_korp_name"], "Организация внутри ГК")
|
||||
|
||||
def test_detail_summary_uses_available_related_report_data(self):
|
||||
organization = OrganizationFactory.create(
|
||||
@@ -136,71 +92,10 @@ class OrganizationApiTest(APITestCase):
|
||||
self.assertTrue(response.data["summary"]["financial_reports_available"])
|
||||
self.assertTrue(response.data["summary"]["tax_reports_available"])
|
||||
|
||||
def test_registry_filter_uses_only_active_memberships(self):
|
||||
active_organization = OrganizationFactory.create(name="АО Актив")
|
||||
closed_organization = OrganizationFactory.create(name="АО Закрыт")
|
||||
register = Register.objects.create(name="Реестр Росатом")
|
||||
upload = RegisterUpload.objects.create(
|
||||
registry=register,
|
||||
actual_date=date(2026, 3, 1),
|
||||
file_name="filter.xlsx",
|
||||
file_hash="filter-api-hash",
|
||||
rows_count=2,
|
||||
)
|
||||
|
||||
RegistryMembershipPeriod.objects.create(
|
||||
registry=register,
|
||||
organization=active_organization,
|
||||
started_at=date(2026, 3, 1),
|
||||
started_by_upload=upload,
|
||||
)
|
||||
RegistryMembershipPeriod.objects.create(
|
||||
registry=register,
|
||||
organization=closed_organization,
|
||||
started_at=date(2026, 2, 1),
|
||||
ended_at=date(2026, 3, 1),
|
||||
started_by_upload=upload,
|
||||
ended_by_upload=upload,
|
||||
)
|
||||
|
||||
response = self.client.get(f"/api/v1/organizations/?registry={register.id}")
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(response.data["results"]), 1)
|
||||
self.assertEqual(response.data["results"][0]["id"], str(active_organization.id))
|
||||
|
||||
def test_corporation_scope_filter_uses_active_registers(self):
|
||||
rosatom_org = OrganizationFactory.create(name="АО Росатом")
|
||||
roscosmos_org = OrganizationFactory.create(name="АО Роскосмос")
|
||||
rosatom_register = Register.objects.create(name="Реестр госкорпорации Росатом")
|
||||
roscosmos_register = Register.objects.create(
|
||||
name="Реестр госкорпорации Роскосмос"
|
||||
)
|
||||
rosatom_upload = RegisterUpload.objects.create(
|
||||
registry=rosatom_register,
|
||||
actual_date=date(2026, 4, 1),
|
||||
file_name="rosatom.xlsx",
|
||||
file_hash="rosatom-hash",
|
||||
rows_count=1,
|
||||
)
|
||||
roscosmos_upload = RegisterUpload.objects.create(
|
||||
registry=roscosmos_register,
|
||||
actual_date=date(2026, 4, 1),
|
||||
file_name="roscosmos.xlsx",
|
||||
file_hash="roscosmos-hash",
|
||||
rows_count=1,
|
||||
)
|
||||
RegistryMembershipPeriod.objects.create(
|
||||
registry=rosatom_register,
|
||||
organization=rosatom_org,
|
||||
started_at=date(2026, 4, 1),
|
||||
started_by_upload=rosatom_upload,
|
||||
)
|
||||
RegistryMembershipPeriod.objects.create(
|
||||
registry=roscosmos_register,
|
||||
organization=roscosmos_org,
|
||||
started_at=date(2026, 4, 1),
|
||||
started_by_upload=roscosmos_upload,
|
||||
def test_corporation_scope_filter_uses_organization_fields(self):
|
||||
rosatom_org = OrganizationFactory.create(name="АО Росатом", gk_name="Росатом")
|
||||
roscosmos_org = OrganizationFactory.create(
|
||||
name="АО Роскосмос", gk_name="Роскосмос"
|
||||
)
|
||||
|
||||
response = self.client.get("/api/v1/organizations/?corporation_scope=rosatom")
|
||||
@@ -222,40 +117,14 @@ class OrganizationApiTest(APITestCase):
|
||||
)
|
||||
|
||||
def test_registry_category_filters_support_snake_and_camel_case(self):
|
||||
opk_org = OrganizationFactory.create(name="АО ОПК")
|
||||
goz_org = OrganizationFactory.create(name="АО ГОЗ", in_275_fz_registry=True)
|
||||
opk_org = OrganizationFactory.create(
|
||||
name="АО ОПК",
|
||||
opk_registry_membership=True,
|
||||
ropk_razdel_name="Раздел ОПК",
|
||||
)
|
||||
goz_org = OrganizationFactory.create(name="АО ГОЗ", goz_participation=True)
|
||||
other_org = OrganizationFactory.create(name="АО Прочие")
|
||||
|
||||
opk_register = Register.objects.create(name="Реестр предприятий ОПК")
|
||||
goz_register = Register.objects.create(name="Реестр госкорпорации Росатом ГОЗ")
|
||||
upload = RegisterUpload.objects.create(
|
||||
registry=opk_register,
|
||||
actual_date=date(2026, 4, 1),
|
||||
file_name="registry-category.xlsx",
|
||||
file_hash="registry-category-hash",
|
||||
rows_count=2,
|
||||
)
|
||||
goz_upload = RegisterUpload.objects.create(
|
||||
registry=goz_register,
|
||||
actual_date=date(2026, 4, 1),
|
||||
file_name="registry-category-goz.xlsx",
|
||||
file_hash="registry-category-goz-hash",
|
||||
rows_count=1,
|
||||
)
|
||||
|
||||
RegistryMembershipPeriod.objects.create(
|
||||
registry=opk_register,
|
||||
organization=opk_org,
|
||||
started_at=date(2026, 4, 1),
|
||||
started_by_upload=upload,
|
||||
)
|
||||
RegistryMembershipPeriod.objects.create(
|
||||
registry=goz_register,
|
||||
organization=goz_org,
|
||||
started_at=date(2026, 4, 1),
|
||||
started_by_upload=goz_upload,
|
||||
)
|
||||
|
||||
response = self.client.get("/api/v1/organizations/?registry_category=goz")
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
"""Tests for Organization model."""
|
||||
|
||||
from datetime import date
|
||||
|
||||
from apps.registers.models import Register, RegisterUpload, RegistryMembershipPeriod
|
||||
from django.test import TestCase
|
||||
|
||||
from .factories import OrganizationFactory
|
||||
@@ -54,73 +51,25 @@ class OrganizationModelTest(TestCase):
|
||||
"""Test OGRN has db_index."""
|
||||
self.assertTrue(self.org._meta.get_field("ogrn").db_index)
|
||||
|
||||
def test_active_registry_names_include_only_current_memberships(self):
|
||||
"""Test only active registry memberships are shown on organization."""
|
||||
active_register = Register.objects.create(name="Активный реестр")
|
||||
inactive_register = Register.objects.create(name="Неактуальный реестр")
|
||||
active_upload = RegisterUpload.objects.create(
|
||||
registry=active_register,
|
||||
actual_date=date(2026, 3, 1),
|
||||
file_name="active.xlsx",
|
||||
file_hash="active-hash",
|
||||
rows_count=1,
|
||||
def test_active_registry_names_are_derived_from_organization_fields(self):
|
||||
"""Test registry display names are derived from organization directory fields."""
|
||||
self.org.gk_name = "Росатом"
|
||||
self.org.goz_participation = True
|
||||
self.org.opk_registry_membership = True
|
||||
self.org.ropk_razdel_name = "Росатом ОПК"
|
||||
|
||||
self.assertEqual(
|
||||
self.org.get_active_registry_names(),
|
||||
["Росатом", "Участие в ГОЗ", "Росатом ОПК"],
|
||||
)
|
||||
inactive_upload = RegisterUpload.objects.create(
|
||||
registry=inactive_register,
|
||||
actual_date=date(2026, 2, 1),
|
||||
file_name="inactive.xlsx",
|
||||
file_hash="inactive-hash",
|
||||
rows_count=1,
|
||||
self.assertEqual(
|
||||
self.org.active_registry_names_display(),
|
||||
"Росатом, Участие в ГОЗ, Росатом ОПК",
|
||||
)
|
||||
|
||||
RegistryMembershipPeriod.objects.create(
|
||||
registry=active_register,
|
||||
organization=self.org,
|
||||
started_at=date(2026, 3, 1),
|
||||
started_by_upload=active_upload,
|
||||
)
|
||||
RegistryMembershipPeriod.objects.create(
|
||||
registry=inactive_register,
|
||||
organization=self.org,
|
||||
started_at=date(2026, 2, 1),
|
||||
ended_at=date(2026, 3, 1),
|
||||
started_by_upload=inactive_upload,
|
||||
ended_by_upload=inactive_upload,
|
||||
)
|
||||
|
||||
self.assertEqual(self.org.get_active_registry_names(), ["Активный реестр"])
|
||||
self.assertEqual(self.org.active_registry_names_display(), "Активный реестр")
|
||||
|
||||
def test_corporation_scopes_are_derived_from_active_registers(self):
|
||||
rosatom_register = Register.objects.create(name="Реестр госкорпорации Росатом")
|
||||
opk_register = Register.objects.create(name="Реестр предприятий ОПК")
|
||||
upload = RegisterUpload.objects.create(
|
||||
registry=rosatom_register,
|
||||
actual_date=date(2026, 4, 1),
|
||||
file_name="scopes.xlsx",
|
||||
file_hash="scopes-hash",
|
||||
rows_count=2,
|
||||
)
|
||||
opk_upload = RegisterUpload.objects.create(
|
||||
registry=opk_register,
|
||||
actual_date=date(2026, 4, 1),
|
||||
file_name="scopes-opk.xlsx",
|
||||
file_hash="scopes-opk-hash",
|
||||
rows_count=2,
|
||||
)
|
||||
|
||||
RegistryMembershipPeriod.objects.create(
|
||||
registry=rosatom_register,
|
||||
organization=self.org,
|
||||
started_at=date(2026, 4, 1),
|
||||
started_by_upload=upload,
|
||||
)
|
||||
RegistryMembershipPeriod.objects.create(
|
||||
registry=opk_register,
|
||||
organization=self.org,
|
||||
started_at=date(2026, 4, 1),
|
||||
started_by_upload=opk_upload,
|
||||
)
|
||||
def test_corporation_scopes_are_derived_from_organization_fields(self):
|
||||
self.org.gk_name = "Росатом"
|
||||
self.org.opk_registry_membership = True
|
||||
|
||||
self.assertEqual(self.org.get_corporation_scopes(), ["rosatom", "opk"])
|
||||
self.assertEqual(
|
||||
|
||||
Reference in New Issue
Block a user