fix pre-commit
Some checks failed
CI/CD Pipeline / Telegram Notify Success (push) Has been cancelled
CI/CD Pipeline / Run Tests (push) Has been cancelled
CI/CD Pipeline / Code Quality Checks (push) Has been cancelled
CI/CD Pipeline / Code Quality Checks (pull_request) Successful in 1m42s
CI/CD Pipeline / Run Tests (pull_request) Successful in 2m25s
CI/CD Pipeline / Telegram Notify Success (pull_request) Successful in 1m34s
Some checks failed
CI/CD Pipeline / Telegram Notify Success (push) Has been cancelled
CI/CD Pipeline / Run Tests (push) Has been cancelled
CI/CD Pipeline / Code Quality Checks (push) Has been cancelled
CI/CD Pipeline / Code Quality Checks (pull_request) Successful in 1m42s
CI/CD Pipeline / Run Tests (pull_request) Successful in 2m25s
CI/CD Pipeline / Telegram Notify Success (pull_request) Successful in 1m34s
This commit is contained in:
@@ -3,7 +3,11 @@ from __future__ import annotations
|
||||
import io
|
||||
from datetime import date
|
||||
|
||||
from apps.registers.services import ParsedOrganization, RegisterImportError, RegisterImportService
|
||||
from apps.registers.services import (
|
||||
ParsedOrganization,
|
||||
RegisterImportError,
|
||||
RegisterImportService,
|
||||
)
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from django.test import TestCase
|
||||
from openpyxl import Workbook
|
||||
@@ -86,7 +90,9 @@ class RegisterImportServiceTest(TestCase):
|
||||
|
||||
def test_get_active_periods_by_org_returns_mapping(self):
|
||||
registry = RegisterFactory()
|
||||
active_period = RegistryMembershipPeriodFactory(registry=registry, ended_at=None)
|
||||
active_period = RegistryMembershipPeriodFactory(
|
||||
registry=registry, ended_at=None
|
||||
)
|
||||
RegistryMembershipPeriodFactory(
|
||||
registry=registry,
|
||||
started_at=date(2026, 1, 1),
|
||||
@@ -224,7 +230,10 @@ class RegisterImportServiceTest(TestCase):
|
||||
started_by_upload=upload,
|
||||
)
|
||||
|
||||
queryset, resolved_date = RegisterImportService.get_registry_organizations_queryset(
|
||||
(
|
||||
queryset,
|
||||
resolved_date,
|
||||
) = RegisterImportService.get_registry_organizations_queryset(
|
||||
registry=registry,
|
||||
mn_ogrn=organization.mn_ogrn,
|
||||
mn_inn=organization.mn_inn,
|
||||
@@ -261,15 +270,21 @@ class RegisterImportServiceTest(TestCase):
|
||||
|
||||
def test_parse_xlsx_raises_on_invalid_workbook_headers_and_empty_rows(self):
|
||||
broken = SimpleUploadedFile("broken.xlsx", b"not-an-excel")
|
||||
with self.assertRaisesMessage(RegisterImportError, "Не удалось прочитать Excel файл"):
|
||||
with self.assertRaisesMessage(
|
||||
RegisterImportError, "Не удалось прочитать Excel файл"
|
||||
):
|
||||
RegisterImportService.parse_xlsx(broken)
|
||||
|
||||
no_headers = _upload("no-headers.xlsx", [])
|
||||
with self.assertRaisesMessage(RegisterImportError, "Файл не содержит заголовков"):
|
||||
with self.assertRaisesMessage(
|
||||
RegisterImportError, "Файл не содержит заголовков"
|
||||
):
|
||||
RegisterImportService.parse_xlsx(no_headers)
|
||||
|
||||
missing_headers = _upload("missing.xlsx", [["pn_name", "mn_ogrn"]])
|
||||
with self.assertRaisesMessage(RegisterImportError, "Отсутствуют обязательные колонки"):
|
||||
with self.assertRaisesMessage(
|
||||
RegisterImportError, "Отсутствуют обязательные колонки"
|
||||
):
|
||||
RegisterImportService.parse_xlsx(missing_headers)
|
||||
|
||||
empty_rows = _upload(
|
||||
@@ -313,29 +328,47 @@ class RegisterImportServiceTest(TestCase):
|
||||
self.assertTrue(RegisterImportService._is_empty_row((None, " ")))
|
||||
self.assertFalse(RegisterImportService._is_empty_row((None, "x")))
|
||||
self.assertEqual(
|
||||
RegisterImportService._as_required_text(" Org ", field_name="pn_name", row_number=2),
|
||||
RegisterImportService._as_required_text(
|
||||
" Org ", field_name="pn_name", row_number=2
|
||||
),
|
||||
"Org",
|
||||
)
|
||||
self.assertEqual(
|
||||
RegisterImportService._as_required_int("123.0", field_name="mn_inn", row_number=2),
|
||||
RegisterImportService._as_required_int(
|
||||
"123.0", field_name="mn_inn", row_number=2
|
||||
),
|
||||
123,
|
||||
)
|
||||
self.assertIsNone(
|
||||
RegisterImportService._as_optional_int(" ", field_name="in_kpp", row_number=2)
|
||||
RegisterImportService._as_optional_int(
|
||||
" ", field_name="in_kpp", row_number=2
|
||||
)
|
||||
)
|
||||
self.assertEqual(
|
||||
RegisterImportService._as_numeric_text("123 456.0", field_name="mn_okpo", row_number=2),
|
||||
RegisterImportService._as_numeric_text(
|
||||
"123 456.0", field_name="mn_okpo", row_number=2
|
||||
),
|
||||
"123456",
|
||||
)
|
||||
|
||||
with self.assertRaisesMessage(RegisterImportError, "поле pn_name обязательно"):
|
||||
RegisterImportService._as_required_text("", field_name="pn_name", row_number=2)
|
||||
RegisterImportService._as_required_text(
|
||||
"", field_name="pn_name", row_number=2
|
||||
)
|
||||
with self.assertRaisesMessage(RegisterImportError, "поле mn_inn обязательно"):
|
||||
RegisterImportService._as_required_int(None, field_name="mn_inn", row_number=2)
|
||||
with self.assertRaisesMessage(RegisterImportError, "поле in_kpp должно быть числом"):
|
||||
RegisterImportService._as_optional_int("abc", field_name="in_kpp", row_number=2)
|
||||
RegisterImportService._as_required_int(
|
||||
None, field_name="mn_inn", row_number=2
|
||||
)
|
||||
with self.assertRaisesMessage(
|
||||
RegisterImportError, "поле in_kpp должно быть числом"
|
||||
):
|
||||
RegisterImportService._as_optional_int(
|
||||
"abc", field_name="in_kpp", row_number=2
|
||||
)
|
||||
with self.assertRaisesMessage(
|
||||
RegisterImportError,
|
||||
"поле mn_okpo должно содержать только цифры",
|
||||
):
|
||||
RegisterImportService._as_numeric_text("ab12", field_name="mn_okpo", row_number=2)
|
||||
RegisterImportService._as_numeric_text(
|
||||
"ab12", field_name="mn_okpo", row_number=2
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user