Allow setting the ASN on document upload

This commit is contained in:
Trenton Holmes
2023-02-19 16:38:34 -08:00
committed by Trenton H
parent 1471dd72a6
commit bec8d00232
5 changed files with 50 additions and 7 deletions

View File

@@ -691,6 +691,14 @@ class PostDocumentSerializer(serializers.Serializer):
required=False,
)
archive_serial_number = serializers.IntegerField(
label="ASN",
write_only=True,
required=False,
min_value=Document.ARCHIVE_SERIAL_NUMBER_MIN,
max_value=Document.ARCHIVE_SERIAL_NUMBER_MAX,
)
def validate_document(self, document):
document_data = document.file.read()
mime_type = magic.from_buffer(document_data, mime=True)

View File

@@ -4,6 +4,7 @@ import os
import shutil
import uuid
from pathlib import Path
from typing import Optional
from typing import Type
import dateutil.parser
@@ -97,6 +98,7 @@ def consume_file(
task_id=None,
override_created=None,
override_owner_id=None,
override_archive_serial_num: Optional[int] = None,
):
path = Path(path).resolve()
@@ -207,7 +209,7 @@ def consume_file(
override_tag_ids=override_tag_ids,
task_id=task_id,
override_created=override_created,
override_asn=asn,
override_asn=override_archive_serial_num or asn,
override_owner_id=override_owner_id,
)

View File

@@ -1318,6 +1318,34 @@ class TestDocumentApi(DirectoriesMixin, APITestCase):
self.assertEqual(kwargs["override_created"], created)
@mock.patch("documents.views.consume_file.delay")
def test_upload_with_asn(self, m):
m.return_value = celery.result.AsyncResult(id=str(uuid.uuid4()))
with open(
os.path.join(os.path.dirname(__file__), "samples", "simple.pdf"),
"rb",
) as f:
response = self.client.post(
"/api/documents/post_document/",
{"document": f, "archive_serial_number": 500},
)
self.assertEqual(response.status_code, 200)
m.assert_called_once()
args, kwargs = m.call_args
file_path = Path(args[0])
self.assertEqual(file_path.name, "simple.pdf")
self.assertIn(Path(settings.SCRATCH_DIR), file_path.parents)
self.assertIsNone(kwargs["override_title"])
self.assertIsNone(kwargs["override_correspondent_id"])
self.assertIsNone(kwargs["override_document_type_id"])
self.assertIsNone(kwargs["override_tag_ids"])
self.assertEqual(500, kwargs["override_archive_serial_num"])
def test_get_metadata(self):
doc = Document.objects.create(
title="test",
@@ -3580,7 +3608,7 @@ class TestTasks(DirectoriesMixin, APITestCase):
self.assertEqual(returned_data["task_file_name"], "anothertest.pdf")
class TestApiUser(APITestCase):
class TestApiUser(DirectoriesMixin, APITestCase):
ENDPOINT = "/api/users/"
def setUp(self):
@@ -3720,7 +3748,7 @@ class TestApiUser(APITestCase):
self.assertNotEqual(returned_user2.password, initial_password)
class TestApiGroup(APITestCase):
class TestApiGroup(DirectoriesMixin, APITestCase):
ENDPOINT = "/api/groups/"
def setUp(self):

View File

@@ -667,6 +667,7 @@ class PostDocumentView(GenericAPIView):
title = serializer.validated_data.get("title")
created = serializer.validated_data.get("created")
owner_id = serializer.validated_data.get("owner")
archive_serial_number = serializer.validated_data.get("archive_serial_number")
t = int(mktime(datetime.now().timetuple()))
@@ -692,6 +693,7 @@ class PostDocumentView(GenericAPIView):
task_id=task_id,
override_created=created,
override_owner_id=owner_id,
override_archive_serial_num=archive_serial_number,
)
return Response(async_task.id)