Files
mostovik-backend/tests/apps/registers/test_admin.py
Aleksandr Meshchriakov e470189f44
Some checks failed
CI/CD Pipeline / Code Quality Checks (push) Failing after 6m24s
CI/CD Pipeline / Run Tests (push) Successful in 20m30s
CI/CD Pipeline / Telegram Notify Success (push) Has been skipped
feat(admin): add excel upload flows for FNS reports and register lists
2026-03-20 12:31:22 +01:00

103 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""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)