fix(fns): queue uploads from worker-visible path
All checks were successful
CI/CD Pipeline / Quality Gate (push) Successful in 21s
CI/CD Pipeline / Build and Push Images (push) Successful in 6s
CI/CD Pipeline / Internal Notify (push) Successful in 1s
CI/CD Pipeline / Deploy Dev in Dokploy (push) Successful in 1s

This commit is contained in:
2026-04-29 01:32:31 +02:00
parent 3f2056bac3
commit d6de9a27b3
5 changed files with 214 additions and 4 deletions

View File

@@ -5,6 +5,7 @@ import os
import tempfile
import time
import zipfile
from types import SimpleNamespace
from unittest.mock import patch
from apps.core.models import BackgroundJob
@@ -274,6 +275,54 @@ class FNSUploadIntegrationTest(APITestCase):
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def test_upload_accepts_worker_visible_server_path(self):
with tempfile.TemporaryDirectory() as tmpdir:
watch_dir, processed_dir, failed_dir = self._dirs(tmpdir)
server_path = os.path.join(watch_dir, "archives", "fin_ropk.zip")
with override_settings(
FNS_WATCH_DIRECTORY=watch_dir,
FNS_PROCESSED_DIRECTORY=processed_dir,
FNS_FAILED_DIRECTORY=failed_dir,
), patch(
"apps.parsers.fns_upload.uuid.uuid4",
return_value="server-path-task-id",
), patch(
"apps.parsers.tasks.process_fns_zip_archive.apply_async",
return_value=SimpleNamespace(id="server-path-task-id"),
) as task_mock:
response = self.client.post(
self.upload_url,
{"server_path": server_path},
format="json",
)
self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED)
self.assertEqual(response.data["queued"], 1)
self.assertEqual(response.data["task_ids"], ["server-path-task-id"])
task_mock.assert_called_once()
job = BackgroundJob.objects.get(task_id="server-path-task-id")
self.assertEqual(job.user_id, self.admin.id)
self.assertEqual(job.meta["server_path"], os.path.realpath(server_path))
self.assertEqual(job.meta["upload_type"], "zip_server_path")
def test_upload_rejects_server_path_outside_fns_directory(self):
with tempfile.TemporaryDirectory() as tmpdir:
watch_dir, processed_dir, failed_dir = self._dirs(tmpdir)
outside_path = os.path.join(tmpdir, "outside", "fin_ropk.zip")
with override_settings(
FNS_WATCH_DIRECTORY=watch_dir,
FNS_PROCESSED_DIRECTORY=processed_dir,
FNS_FAILED_DIRECTORY=failed_dir,
):
response = self.client.post(
self.upload_url,
{"server_path": outside_path},
format="json",
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertFalse(BackgroundJob.objects.exists())
def test_upload_skips_when_file_already_exists(self):
content = _build_fns_excel_bytes()
external_id = _digits(5)