feat: import additional exchange sections
All checks were successful
CI/CD Pipeline / Code Quality Checks (push) Successful in 2m41s
CI/CD Pipeline / Run Tests (push) Successful in 2m47s
CI/CD Pipeline / Build Docker Images (push) Successful in 2m24s
CI/CD Pipeline / Push to Gitea Registry (push) Successful in 0s
CI/CD Pipeline / Deploy to Server (push) Successful in 0s

This commit is contained in:
2026-05-12 15:19:26 +02:00
parent ed34603116
commit bd8e1a8400
25 changed files with 1117 additions and 72 deletions

View File

@@ -3,10 +3,13 @@
import factory
from apps.external_data.models import (
ArbitrationCase,
BankruptcyProcedure,
DefenseUnreliableSupplier,
IndustrialProduct,
InformationSecurityRegistryEntry,
LaborVacancy,
ProsecutorCheck,
PublicProcurement,
InformationSecurityRegistryEntry,
)
from faker import Faker
@@ -71,9 +74,7 @@ class ArbitrationCaseFactory(factory.django.DjangoModelFactory):
decision_date = factory.LazyAttribute(lambda _: fake.date_this_year())
class InformationSecurityRegistryEntryFactory(
factory.django.DjangoModelFactory
):
class InformationSecurityRegistryEntryFactory(factory.django.DjangoModelFactory):
class Meta:
model = InformationSecurityRegistryEntry
@@ -83,3 +84,45 @@ class InformationSecurityRegistryEntryFactory(
entry_number = "77-001234"
issued_at = factory.LazyAttribute(lambda _: fake.date_this_year())
expires_at = factory.LazyAttribute(lambda _: fake.date_this_year())
class BankruptcyProcedureFactory(factory.django.DjangoModelFactory):
class Meta:
model = BankruptcyProcedure
organization = factory.SubFactory(OrganizationFactory)
external_id = factory.Sequence(lambda n: f"fedresurs:{n}")
message_type = "Сообщение о намерении"
message_date = factory.LazyAttribute(lambda _: fake.date_this_year())
case_number = factory.Sequence(lambda n: f"А40-{20_000 + n}/2026")
status = "published"
source_url = factory.Sequence(lambda n: f"https://fedresurs.ru/message/{n}")
class DefenseUnreliableSupplierFactory(factory.django.DjangoModelFactory):
class Meta:
model = DefenseUnreliableSupplier
organization = factory.SubFactory(OrganizationFactory)
external_id = factory.Sequence(lambda n: f"fas-goz:{n}")
registry_source = "fas_goz"
registry_number = factory.Sequence(lambda n: f"ГОЗ-{n:04d}")
supplier_name = factory.LazyAttribute(lambda obj: obj.organization.name)
reason = "Уклонение от заключения контракта"
included_at = factory.LazyAttribute(lambda _: fake.date_this_year())
status = "active"
source_url = factory.Sequence(lambda n: f"https://fas.gov.ru/register/{n}")
class LaborVacancyFactory(factory.django.DjangoModelFactory):
class Meta:
model = LaborVacancy
organization = factory.SubFactory(OrganizationFactory)
external_id = factory.Sequence(lambda n: f"trudvsem:{n}")
vacancy_source = "trudvsem"
title = "Инженер-испытатель"
status = "open"
published_at = factory.LazyAttribute(lambda _: fake.date_this_year())
salary_amount = "175000.00"
source_url = factory.Sequence(lambda n: f"https://trudvsem.ru/vacancy/{n}")

View File

@@ -10,10 +10,13 @@ from rest_framework.test import APITestCase
from tests.apps.external_data.factories import (
ArbitrationCaseFactory,
BankruptcyProcedureFactory,
DefenseUnreliableSupplierFactory,
IndustrialProductFactory,
InformationSecurityRegistryEntryFactory,
LaborVacancyFactory,
ProsecutorCheckFactory,
PublicProcurementFactory,
InformationSecurityRegistryEntryFactory,
)
from tests.apps.organization.factories import OrganizationFactory
from tests.apps.user.factories import UserFactory
@@ -116,3 +119,47 @@ class ExternalDataApiTest(APITestCase):
self.assertEqual(result["presence_status"], "present")
self.assertIn("registry_name", result)
self.assertIn("entry_number", result)
def test_additional_exchange_sections_are_exposed(self):
BankruptcyProcedureFactory.create(
organization=self.organization,
message_type="Сообщение о намерении",
message_date=date(2026, 3, 26),
)
DefenseUnreliableSupplierFactory.create(
organization=self.organization,
registry_source="fas_goz",
included_at=date(2026, 2, 20),
)
LaborVacancyFactory.create(
organization=self.organization,
vacancy_source="trudvsem",
published_at=date(2026, 4, 1),
)
BankruptcyProcedureFactory.create(organization=self.other_organization)
DefenseUnreliableSupplierFactory.create(organization=self.other_organization)
LaborVacancyFactory.create(organization=self.other_organization)
bankruptcy_response = self.client.get(
f"/api/v1/bankruptcy-procedures/?organization={self.organization.id}"
"&message_date_from=2026-01-01&message_date_to=2026-12-31"
)
defense_response = self.client.get(
f"/api/v1/defense-unreliable-suppliers/?organization={self.organization.id}"
"&registry_source=fas_goz"
)
vacancies_response = self.client.get(
f"/api/v1/labor-vacancies/?organization={self.organization.id}"
"&vacancy_source=trudvsem"
)
self.assertEqual(bankruptcy_response.status_code, status.HTTP_200_OK)
self.assertEqual(defense_response.status_code, status.HTTP_200_OK)
self.assertEqual(vacancies_response.status_code, status.HTTP_200_OK)
self.assertEqual(bankruptcy_response.data["count"], 1)
self.assertEqual(defense_response.data["count"], 1)
self.assertEqual(vacancies_response.data["count"], 1)
self.assertEqual(
vacancies_response.data["results"][0]["title"],
"Инженер-испытатель",
)