Files
state-corp-backend/tests/apps/organization/test_api.py
Aleksandr Meshchriakov 9eb41f6fd4
All checks were successful
CI/CD Pipeline / Run Tests (push) Successful in 2m26s
CI/CD Pipeline / Code Quality Checks (push) Successful in 5m3s
CI/CD Pipeline / Build and Push Dev Images (push) Successful in 32s
CI/CD Pipeline / Deploy Dev via Compose (push) Successful in 31s
feat: address QA analytics and report upload feedback
2026-07-19 13:32:56 +02:00

187 lines
8.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Tests for organization API."""
from __future__ import annotations
from django.test import override_settings
from rest_framework import status
from rest_framework.test import APITestCase
from tests.apps.external_data.factories import FinancialReportFactory
from tests.apps.form_2.factories import FormF2RecordFactory
from tests.apps.organization.factories import OrganizationFactory
from tests.apps.user.factories import UserFactory
@override_settings(ROOT_URLCONF="core.urls")
class OrganizationApiTest(APITestCase):
"""Tests for organization endpoints."""
def setUp(self):
self.user = UserFactory.create_user()
self.client.force_authenticate(self.user)
def test_list_includes_only_active_registry_names(self):
OrganizationFactory.create(
name="АО Альфа",
short_name="АО «Альфа»",
organization_type="ao",
opk_registry_membership=True,
)
response = self.client.get("/api/v1/organizations/")
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(
response.data["results"][0]["active_registry_names"], ["Реестр ОПК"]
)
self.assertEqual(response.data["results"][0]["corporation_scope"], "opk")
self.assertEqual(
response.data["results"][0]["corporation_scope_label"],
"Организации ОПК",
)
self.assertEqual(response.data["results"][0]["registry_category"], "opk")
self.assertEqual(response.data["results"][0]["registry_category_label"], "ОПК")
self.assertEqual(response.data["results"][0]["short_name"], "АО «Альфа»")
def test_catalog_hides_form_only_organization_until_mostovik_confirms_it(self):
organization = OrganizationFactory.create(mostovik_uid=None)
list_response = self.client.get("/api/v1/organizations/")
detail_response = self.client.get(f"/api/v1/organizations/{organization.id}/")
self.assertEqual(list_response.status_code, status.HTTP_200_OK)
self.assertEqual(list_response.data["count"], 0)
self.assertEqual(detail_response.status_code, status.HTTP_404_NOT_FOUND)
organization.mostovik_uid = "11111111-1111-4111-8111-111111111111"
organization.save(update_fields=["mostovik_uid", "updated_at"])
list_response = self.client.get("/api/v1/organizations/")
detail_response = self.client.get(f"/api/v1/organizations/{organization.id}/")
self.assertEqual(list_response.data["count"], 1)
self.assertEqual(detail_response.status_code, status.HTTP_200_OK)
def test_detail_includes_active_registries(self):
organization = OrganizationFactory.create(
short_name="АО «Бета»",
general_director="Иванов Иван Иванович",
general_director_tax_id="123456789012",
financial_reports_available=True,
tax_reports_available=True,
gk_code="2",
gk_name="Роскосмос",
in_korp_name="Организация внутри ГК",
)
response = self.client.get(f"/api/v1/organizations/{organization.id}/")
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(
response.data["summary"]["active_registry_names"],
["Роскосмос"],
)
self.assertEqual(
response.data["active_registries"],
[{"id": "2", "name": "Роскосмос"}],
)
self.assertEqual(response.data["corporation_scope"], "roscosmos")
self.assertEqual(
response.data["corporation_scope_label"],
"Госкорпорация «Роскосмос»",
)
self.assertEqual(response.data["registry_category"], "other")
self.assertEqual(response.data["registry_category_label"], "Прочие")
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(
financial_reports_available=False,
tax_reports_available=False,
)
FinancialReportFactory.create(organization=organization, status="success")
FormF2RecordFactory.create(organization=organization, income_tax="1200.00")
response = self.client.get(f"/api/v1/organizations/{organization.id}/")
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertTrue(response.data["summary"]["financial_reports_available"])
self.assertTrue(response.data["summary"]["tax_reports_available"])
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")
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data["results"]), 1)
self.assertEqual(response.data["results"][0]["id"], str(rosatom_org.id))
for scope_code in ("roscosmos", "roskosmos"):
response = self.client.get(
f"/api/v1/organizations/?corporation_scope={scope_code}"
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data["results"]), 1)
self.assertEqual(response.data["results"][0]["id"], str(roscosmos_org.id))
self.assertEqual(
response.data["results"][0]["corporation_scope"], "roscosmos"
)
def test_registry_category_filters_support_snake_and_camel_case(self):
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="АО Прочие")
response = self.client.get("/api/v1/organizations/?registry_category=goz")
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(
[item["id"] for item in response.data["results"]], [str(goz_org.id)]
)
response = self.client.get("/api/v1/organizations/?registryCategory=opk")
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(
[item["id"] for item in response.data["results"]], [str(opk_org.id)]
)
response = self.client.get("/api/v1/organizations/?registry_category=other")
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertIn(
str(other_org.id), [item["id"] for item in response.data["results"]]
)
class OrganizationDictionaryApiTest(APITestCase):
"""Tests for organization dictionaries endpoints."""
def setUp(self):
self.user = UserFactory.create_user()
self.client.force_authenticate(self.user)
def test_corporation_scopes_dictionary_returns_sorted_results(self):
response = self.client.get("/api/v1/dictionaries/corporation-scopes/")
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertIn("results", response.data)
self.assertGreaterEqual(len(response.data["results"]), 3)
sort_orders = [item["sort_order"] for item in response.data["results"]]
self.assertEqual(sort_orders, sorted(sort_orders))
first_item = response.data["results"][0]
self.assertEqual(first_item["code"], "rosatom")
self.assertIn("short_name", first_item)
self.assertIn("name", first_item)
self.assertIn("sort_order", first_item)