144 lines
5.6 KiB
Python
144 lines
5.6 KiB
Python
"""Tests for populate_organizations command."""
|
||
|
||
from apps.parsers.models import GenericParserRecord, ProcurementRecord
|
||
from django.core.management import call_command
|
||
from django.test import TestCase
|
||
from organizations.models import Organization
|
||
from registers.models import Organization as RegisterOrganization
|
||
|
||
|
||
class PopulateOrganizationsCommandTest(TestCase):
|
||
"""Checks idempotent organization population from existing DB records."""
|
||
|
||
def test_command_populates_from_registers_and_parser_records(self):
|
||
RegisterOrganization.objects.create(
|
||
pn_name='Общество с ограниченной ответственностью "Ромашка"',
|
||
mn_inn=7707083893,
|
||
mn_ogrn=1027700132195,
|
||
in_kpp=770701001,
|
||
mn_okpo="12345678",
|
||
)
|
||
ProcurementRecord.objects.create(
|
||
load_batch=1,
|
||
purchase_number="001",
|
||
purchase_name="Поставка",
|
||
customer_inn="7707083893",
|
||
customer_kpp="770701001",
|
||
customer_ogrn="1027700132195",
|
||
customer_name='OOO "Ромашка"',
|
||
)
|
||
GenericParserRecord.objects.create(
|
||
load_batch=1,
|
||
source="arbitration",
|
||
external_id="name-only-1",
|
||
organisation_name='ООО "Ромашка"',
|
||
)
|
||
GenericParserRecord.objects.create(
|
||
load_batch=1,
|
||
source="trudvsem",
|
||
external_id="name-only-2",
|
||
organisation_name="ИП Иванов Иван Иванович",
|
||
inn="500100732259",
|
||
ogrn="304500116000157",
|
||
)
|
||
|
||
call_command("populate_organizations", silent=True, verbosity=0)
|
||
call_command("populate_organizations", silent=True, verbosity=0)
|
||
|
||
self.assertEqual(Organization.objects.count(), 2)
|
||
|
||
legal_entity = Organization.objects.get(inn="7707083893")
|
||
self.assertEqual(legal_entity.name, 'Общество с ограниченной ответственностью "Ромашка"')
|
||
self.assertEqual(legal_entity.kpp, "770701001")
|
||
self.assertEqual(legal_entity.ogrn, "1027700132195")
|
||
self.assertEqual(legal_entity.ogrip, "")
|
||
|
||
entrepreneur = Organization.objects.get(inn="500100732259")
|
||
self.assertEqual(entrepreneur.name, "ИП Иванов Иван Иванович")
|
||
self.assertEqual(entrepreneur.kpp, "")
|
||
self.assertEqual(entrepreneur.ogrn, "")
|
||
self.assertEqual(entrepreneur.ogrip, "304500116000157")
|
||
|
||
def test_command_merges_name_only_ooo_variants(self):
|
||
GenericParserRecord.objects.create(
|
||
load_batch=1,
|
||
source="arbitration",
|
||
external_id="name-only-1",
|
||
organisation_name='OOO "Ромашка"',
|
||
)
|
||
GenericParserRecord.objects.create(
|
||
load_batch=1,
|
||
source="trudvsem",
|
||
external_id="name-only-2",
|
||
organisation_name="Общество с ограниченной ответственностью Ромашка",
|
||
)
|
||
|
||
call_command("populate_organizations", silent=True, verbosity=0)
|
||
|
||
self.assertEqual(Organization.objects.count(), 1)
|
||
self.assertEqual(Organization.objects.get().name, "Общество с ограниченной ответственностью Ромашка")
|
||
|
||
def test_command_populates_kpp_from_generic_payload_company(self):
|
||
GenericParserRecord.objects.create(
|
||
load_batch=1,
|
||
source="trudvsem",
|
||
external_id="generic-with-kpp",
|
||
organisation_name='ООО "Источник"',
|
||
inn="7707083893",
|
||
ogrn="1027700132195",
|
||
payload={"company": {"kpp": "770701001"}},
|
||
)
|
||
|
||
call_command("populate_organizations", silent=True, verbosity=0)
|
||
|
||
organization = Organization.objects.get(inn="7707083893")
|
||
self.assertEqual(organization.kpp, "770701001")
|
||
|
||
def test_command_keeps_same_inn_different_kpp_as_distinct_branches(self):
|
||
GenericParserRecord.objects.create(
|
||
load_batch=1,
|
||
source="trudvsem",
|
||
external_id="branch-1",
|
||
organisation_name='ООО "Источник"',
|
||
inn="7707083893",
|
||
ogrn="1027700132195",
|
||
payload={"company": {"kpp": "770701001"}},
|
||
)
|
||
GenericParserRecord.objects.create(
|
||
load_batch=1,
|
||
source="trudvsem",
|
||
external_id="branch-2",
|
||
organisation_name='ООО "Источник"',
|
||
inn="7707083893",
|
||
ogrn="1027700132195",
|
||
payload={"company": {"kpp": "780101001"}},
|
||
)
|
||
|
||
call_command("populate_organizations", silent=True, verbosity=0)
|
||
|
||
self.assertEqual(
|
||
set(Organization.objects.filter(inn="7707083893").values_list("kpp", flat=True)),
|
||
{"770701001", "780101001"},
|
||
)
|
||
|
||
def test_command_updates_existing_blank_kpp_organization_from_branch_candidate(self):
|
||
Organization.objects.create(
|
||
name='ООО "Источник"',
|
||
inn="7707083893",
|
||
ogrn="1027700132195",
|
||
)
|
||
GenericParserRecord.objects.create(
|
||
load_batch=1,
|
||
source="trudvsem",
|
||
external_id="branch-with-kpp",
|
||
organisation_name='ООО "Источник"',
|
||
inn="7707083893",
|
||
ogrn="1027700132195",
|
||
payload={"company": {"kpp": "770701001"}},
|
||
)
|
||
|
||
call_command("populate_organizations", silent=True, verbosity=0)
|
||
|
||
self.assertEqual(Organization.objects.filter(inn="7707083893").count(), 1)
|
||
self.assertEqual(Organization.objects.get(inn="7707083893").kpp, "770701001")
|