"""Tests for registers admin configuration.""" import io from apps.registers.admin import RegisterUploadAdmin from apps.registers.models import Organization, RegisterUpload, RegistryMembershipPeriod from django.contrib.admin.sites import AdminSite from django.contrib.messages.storage.fallback import FallbackStorage from django.core.files.uploadedfile import SimpleUploadedFile from django.test import RequestFactory, TestCase from openpyxl import Workbook from tests.apps.registers.factories import RegisterFactory from tests.apps.user.factories import UserFactory def _build_register_excel_upload(filename: str = "registry.xlsx") -> SimpleUploadedFile: workbook = Workbook() worksheet = workbook.active worksheet.append(["pn_name", "mn_ogrn", "mn_inn", "in_kpp", "mn_okpo"]) worksheet.append( [ 'АО "Тестовая организация"', 1027600980990, 7601000086, 760401001, "07506197", ] ) buffer = io.BytesIO() workbook.save(buffer) workbook.close() return SimpleUploadedFile( filename, buffer.getvalue(), content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ) class RegistersAdminTest(TestCase): def setUp(self): self.site = AdminSite() self.factory = RequestFactory() self.user = UserFactory.create_superuser() def _post_request(self, data): request = self.factory.post( "/admin/registers/registerupload/upload-excel/", data=data, ) request.user = self.user request.session = {} request._messages = FallbackStorage(request) return request def test_register_upload_admin_has_custom_upload_route(self): admin = RegisterUploadAdmin(RegisterUpload, self.site) route_names = [route.name for route in admin.get_urls()] self.assertIn("registers_registerupload_upload_excel", route_names) def test_register_upload_admin_upload_excel_success(self): admin = RegisterUploadAdmin(RegisterUpload, self.site) registry = RegisterFactory() uploaded_file = _build_register_excel_upload() request = self._post_request( { "registry": str(registry.id), "actual_date": "2026-03-20", "file": uploaded_file, } ) response = admin.upload_excel_view(request) self.assertEqual(response.status_code, 302) self.assertEqual(RegisterUpload.objects.count(), 1) self.assertEqual(Organization.objects.count(), 1) self.assertEqual(RegistryMembershipPeriod.objects.count(), 1) upload = RegisterUpload.objects.first() self.assertEqual(upload.registry, registry) self.assertEqual(upload.actual_date.isoformat(), "2026-03-20") def test_register_upload_admin_upload_excel_invalid_extension(self): admin = RegisterUploadAdmin(RegisterUpload, self.site) registry = RegisterFactory() invalid_file = SimpleUploadedFile("registry.txt", b"text/plain") request = self._post_request( { "registry": str(registry.id), "actual_date": "2026-03-20", "file": invalid_file, } ) response = admin.upload_excel_view(request) self.assertEqual(response.status_code, 302) self.assertEqual(RegisterUpload.objects.count(), 0)