feat(admin): add excel upload flows for FNS reports and register lists
This commit is contained in:
@@ -244,3 +244,7 @@ class ParsersAdminTest(TestCase):
|
||||
)
|
||||
self.assertEqual(admin.lines_count(report), 1)
|
||||
self.assertIn("span", str(admin.status_badge(report)))
|
||||
self.assertIn("registry_organization", admin.list_display)
|
||||
self.assertIn("registry_organization__pn_name", admin.search_fields)
|
||||
route_names = [route.name for route in admin.get_urls()]
|
||||
self.assertIn("parsers_financialreport_upload_excel", route_names)
|
||||
|
||||
102
tests/apps/registers/test_admin.py
Normal file
102
tests/apps/registers/test_admin.py
Normal file
@@ -0,0 +1,102 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user