Add organization stats endpoint
All checks were successful
CI/CD Pipeline / Quality Gate (push) Successful in 24s
CI/CD Pipeline / Build and Push Images (push) Successful in 10s
CI/CD Pipeline / Internal Notify (push) Successful in 0s
CI/CD Pipeline / Deploy Dev in Dokploy (push) Successful in 1s

This commit is contained in:
2026-05-12 17:48:54 +02:00
parent ab3e672a8d
commit 89607356b7
6 changed files with 342 additions and 13 deletions

View File

@@ -6,7 +6,7 @@ import io
from datetime import date
from unittest.mock import patch
from apps.registers.models import Organization, RegistryMembershipPeriod
from apps.registers.models import Organization, Register, RegistryMembershipPeriod
from django.core.files.uploadedfile import SimpleUploadedFile
from django.db import IntegrityError
from django.urls import reverse
@@ -198,6 +198,55 @@ class RegistersViewsTest(APITestCase):
"/api/v2/registers/rosatom-goz/upload/",
)
def test_stat_organizations_endpoint_returns_registry_cards(self):
opk_registry, _ = Register.objects.get_or_create(name="Реестр предприятий ОПК")
rosatom_registry, _ = Register.objects.get_or_create(
name="Реестр госкорпорации Росатом"
)
roscosmos_goz_registry, _ = Register.objects.get_or_create(
name="Реестр госкорпорации Роскосмос ГОЗ"
)
opk_organization = OrganizationFactory()
shared_organization = OrganizationFactory()
inactive_organization = OrganizationFactory()
RegistryMembershipPeriodFactory(
registry=opk_registry,
organization=opk_organization,
)
RegistryMembershipPeriodFactory(
registry=rosatom_registry,
organization=opk_organization,
)
RegistryMembershipPeriodFactory(
registry=rosatom_registry,
organization=shared_organization,
)
RegistryMembershipPeriodFactory(
registry=roscosmos_goz_registry,
organization=inactive_organization,
ended_at=date(2026, 6, 1),
)
response = self.client.get("/api/v1/stat/organizations/")
self.assertEqual(response.status_code, status.HTTP_200_OK)
payload = response.data["data"]
self.assertEqual(payload["total_organizations"], 3)
self.assertEqual(payload["active_registry_organizations"], 2)
self.assertEqual(payload["counts"]["total"], 3)
self.assertEqual(payload["counts"]["opk"], 1)
self.assertEqual(payload["counts"]["rosatom"], 2)
self.assertEqual(payload["counts"]["roscosmos-goz"], 0)
cards_by_slug = {item["slug"]: item for item in payload["cards"]}
self.assertEqual(
cards_by_slug["total"]["title"],
"Общее количество организаций",
)
self.assertEqual(
cards_by_slug["rosatom"]["registry_name"],
"Реестр госкорпорации Росатом",
)
def test_v2_registry_slug_upload_does_not_refresh_snapshots_after_import_error(self):
rows = [
{