"""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_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)