"""Tests for external data endpoints.""" from __future__ import annotations from datetime import date from django.test import override_settings from rest_framework import status from rest_framework.test import APITestCase from tests.apps.external_data.factories import ( ArbitrationCaseFactory, IndustrialProductFactory, ProsecutorCheckFactory, PublicProcurementFactory, InformationSecurityRegistryEntryFactory, ) from tests.apps.organization.factories import OrganizationFactory from tests.apps.user.factories import UserFactory @override_settings(ROOT_URLCONF="core.urls") class ExternalDataApiTest(APITestCase): def setUp(self): self.user = UserFactory.create_user() self.client.force_authenticate(self.user) self.organization = OrganizationFactory.create() self.other_organization = OrganizationFactory.create() def test_industrial_products_endpoint_uses_classic_pagination(self): IndustrialProductFactory.create( organization=self.organization, product_name="Лазерные датчики расстояния", ) IndustrialProductFactory.create(organization=self.other_organization) response = self.client.get( f"/api/v1/industrial-products/?organization={self.organization.id}&search=датчики" ) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertIn("results", response.data) self.assertEqual(response.data["count"], 1) self.assertEqual( response.data["results"][0]["organization"], str(self.organization.id) ) def test_prosecutor_checks_support_date_range_filters(self): ProsecutorCheckFactory.create( organization=self.organization, law_type="294_fz", start_date=date(2025, 1, 15), ) ProsecutorCheckFactory.create( organization=self.organization, law_type="294_fz", start_date=date(2023, 1, 15), ) response = self.client.get( f"/api/v1/prosecutor-checks/?organization={self.organization.id}" "&law_type=294_fz&start_date_from=2024-01-01&start_date_to=2025-12-31" ) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data["count"], 1) def test_public_procurements_and_arbitration_cases_filters(self): PublicProcurementFactory.create( organization=self.organization, law_type="44_fz", contract_date=date(2025, 1, 15), ) ArbitrationCaseFactory.create( organization=self.organization, party_role="defendant", decision_date=date(2026, 1, 27), ) procurement_response = self.client.get( f"/api/v1/public-procurements/?organization={self.organization.id}" "&law_type=44_fz&contract_date_from=2024-01-01&contract_date_to=2025-12-31" ) arbitration_response = self.client.get( f"/api/v1/arbitration-cases/?organization={self.organization.id}" "&party_role=defendant&decision_date_from=2025-01-01&decision_date_to=2026-12-31" ) self.assertEqual(procurement_response.status_code, status.HTTP_200_OK) self.assertEqual(procurement_response.data["count"], 1) self.assertEqual(arbitration_response.status_code, status.HTTP_200_OK) self.assertEqual(arbitration_response.data["count"], 1) def test_information_security_registry_entries_filter(self): InformationSecurityRegistryEntryFactory( organization=self.organization, presence_status="present", ) InformationSecurityRegistryEntryFactory( organization=self.other_organization, presence_status="absent", ) response = self.client.get( f"/api/v1/security-registries/?organization={self.organization.id}" "&presence_status=present" ) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data["count"], 1) result = response.data["results"][0] self.assertEqual( result["organization"], str(self.organization.id), ) self.assertEqual(result["presence_status"], "present") self.assertIn("registry_name", result) self.assertIn("entry_number", result)