All checks were successful
CI/CD Pipeline / Run Tests (push) Successful in 6m12s
CI/CD Pipeline / Code Quality Checks (push) Successful in 6m19s
CI/CD Pipeline / Build Docker Images (push) Successful in 2m21s
CI/CD Pipeline / Push to Gitea Registry (push) Successful in 1s
CI/CD Pipeline / Deploy to Server (push) Successful in 1s
186 lines
6.9 KiB
Python
186 lines
6.9 KiB
Python
"""Factories for external data models."""
|
||
|
||
import factory
|
||
from apps.external_data.models import (
|
||
ArbitrationCase,
|
||
BankruptcyProcedure,
|
||
DefenseUnreliableSupplier,
|
||
FinancialReport,
|
||
FinancialReportLine,
|
||
IndustrialCertificate,
|
||
IndustrialProduct,
|
||
InformationSecurityRegistryEntry,
|
||
LaborVacancy,
|
||
ManufacturerRegistryEntry,
|
||
ProsecutorCheck,
|
||
PublicProcurement,
|
||
)
|
||
from faker import Faker
|
||
|
||
from tests.apps.organization.factories import OrganizationFactory
|
||
|
||
fake = Faker("ru_RU")
|
||
|
||
|
||
class IndustrialProductFactory(factory.django.DjangoModelFactory):
|
||
class Meta:
|
||
model = IndustrialProduct
|
||
|
||
organization = factory.SubFactory(OrganizationFactory)
|
||
product_name = factory.LazyAttribute(lambda _: fake.sentence(nb_words=3))
|
||
product_class = "electronics"
|
||
okpd2_code = "26.51.53"
|
||
tnved_code = "9015.10"
|
||
registry_number = factory.Sequence(lambda n: f"{1000 + n}/2026")
|
||
|
||
|
||
class IndustrialCertificateFactory(factory.django.DjangoModelFactory):
|
||
class Meta:
|
||
model = IndustrialCertificate
|
||
|
||
organization = factory.SubFactory(OrganizationFactory)
|
||
certificate_number = factory.Sequence(lambda n: f"CERT-{n:04d}")
|
||
issue_date = factory.LazyAttribute(lambda _: fake.date_this_year())
|
||
expiry_date = factory.LazyAttribute(lambda _: fake.date_this_decade())
|
||
certificate_file_url = factory.Sequence(
|
||
lambda n: f"https://minpromtorg.gov.ru/cert/{n}"
|
||
)
|
||
organisation_name = factory.LazyAttribute(lambda obj: obj.organization.name)
|
||
ogrn = factory.LazyAttribute(lambda obj: obj.organization.ogrn)
|
||
|
||
|
||
class ManufacturerRegistryEntryFactory(factory.django.DjangoModelFactory):
|
||
class Meta:
|
||
model = ManufacturerRegistryEntry
|
||
|
||
organization = factory.SubFactory(OrganizationFactory)
|
||
full_legal_name = factory.LazyAttribute(lambda obj: obj.organization.name)
|
||
inn = factory.LazyAttribute(lambda obj: obj.organization.inn)
|
||
ogrn = factory.LazyAttribute(lambda obj: obj.organization.ogrn)
|
||
address = factory.LazyAttribute(lambda _: fake.address())
|
||
|
||
|
||
class ProsecutorCheckFactory(factory.django.DjangoModelFactory):
|
||
class Meta:
|
||
model = ProsecutorCheck
|
||
|
||
organization = factory.SubFactory(OrganizationFactory)
|
||
registration_number = factory.Sequence(lambda n: f"{2_900_000_000 + n}")
|
||
law_type = "294_fz"
|
||
control_authority = "Центральное управление Ростехнадзора"
|
||
prosecutor_office = "Московская городская прокуратура"
|
||
start_date = factory.LazyAttribute(lambda _: fake.date_this_decade())
|
||
status = "planned"
|
||
|
||
|
||
class PublicProcurementFactory(factory.django.DjangoModelFactory):
|
||
class Meta:
|
||
model = PublicProcurement
|
||
|
||
organization = factory.SubFactory(OrganizationFactory)
|
||
purchase_number = factory.Sequence(lambda n: f"{37_310_000_000_000_0000 + n:019d}")
|
||
law_type = "44_fz"
|
||
status = "signing"
|
||
contract_amount = factory.LazyAttribute(
|
||
lambda _: fake.pydecimal(left_digits=8, right_digits=2, positive=True)
|
||
)
|
||
contract_date = factory.LazyAttribute(lambda _: fake.date_this_year())
|
||
execution_start_date = factory.LazyAttribute(lambda _: fake.date_this_year())
|
||
execution_end_date = factory.LazyAttribute(
|
||
lambda _: fake.date_between(start_date="+30d", end_date="+365d")
|
||
)
|
||
purchase_name = factory.LazyAttribute(lambda _: fake.sentence(nb_words=6))
|
||
|
||
|
||
class ArbitrationCaseFactory(factory.django.DjangoModelFactory):
|
||
class Meta:
|
||
model = ArbitrationCase
|
||
|
||
organization = factory.SubFactory(OrganizationFactory)
|
||
case_number = factory.Sequence(lambda n: f"А40-{16_000 + n}/2026")
|
||
court_name = "Арбитражный суд города Москвы"
|
||
party_role = "defendant"
|
||
status = "hearing_scheduled"
|
||
decision_date = factory.LazyAttribute(lambda _: fake.date_this_year())
|
||
|
||
|
||
class InformationSecurityRegistryEntryFactory(factory.django.DjangoModelFactory):
|
||
class Meta:
|
||
model = InformationSecurityRegistryEntry
|
||
|
||
organization = factory.SubFactory(OrganizationFactory)
|
||
registry_name = "Реестр лицензий на деятельность по технической защите конфиденциальной информации"
|
||
presence_status = "present"
|
||
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}")
|
||
|
||
|
||
class FinancialReportFactory(factory.django.DjangoModelFactory):
|
||
class Meta:
|
||
model = FinancialReport
|
||
|
||
organization = factory.SubFactory(OrganizationFactory)
|
||
external_id = factory.Sequence(lambda n: f"fin-{n:04d}")
|
||
ogrn = factory.LazyAttribute(lambda obj: obj.organization.ogrn)
|
||
file_name = factory.Sequence(lambda n: f"fin_{n:04d}.xlsx")
|
||
file_hash = factory.Sequence(lambda n: f"{n:064x}"[-64:])
|
||
load_batch = factory.Sequence(lambda n: n + 1)
|
||
status = "success"
|
||
source = "api"
|
||
|
||
|
||
class FinancialReportLineFactory(factory.django.DjangoModelFactory):
|
||
class Meta:
|
||
model = FinancialReportLine
|
||
|
||
report = factory.SubFactory(FinancialReportFactory)
|
||
form_code = "1"
|
||
line_code = "1600"
|
||
line_name = "Баланс"
|
||
year = 2025
|
||
period_start = 1000
|
||
period_end = 1500
|