From 15aa99e02ffd4aafa087e08923a2aa4d7a8e60b8 Mon Sep 17 00:00:00 2001
From: ml bonhomme <bonhomme@teklia.com>
Date: Tue, 9 Jan 2024 08:36:51 +0000
Subject: [PATCH] Human readable file max size error in file import

---
 arkindex/process/serializers/files.py       |  3 +++
 arkindex/process/tests/test_datafile_api.py | 12 ++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/arkindex/process/serializers/files.py b/arkindex/process/serializers/files.py
index 32efdb8c4d..497aa2e5f5 100644
--- a/arkindex/process/serializers/files.py
+++ b/arkindex/process/serializers/files.py
@@ -71,6 +71,9 @@ class DataFileCreateSerializer(serializers.ModelSerializer):
             "s3_put_url",
         )
         read_only_fields = ("id", "status", "s3_url", "s3_put_url")
+        extra_kwargs = {
+            "size": {"error_messages": {"max_value": "File size exceeds maximum limit of 2GB."}}
+        }
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
diff --git a/arkindex/process/tests/test_datafile_api.py b/arkindex/process/tests/test_datafile_api.py
index 053f36a749..2d673ad00c 100644
--- a/arkindex/process/tests/test_datafile_api.py
+++ b/arkindex/process/tests/test_datafile_api.py
@@ -74,6 +74,18 @@ class TestDataFileApi(FixtureAPITestCase):
             ["some text", 1, "http://s3/upload_put_url"]
         )
 
+    @patch("arkindex.project.aws.s3.meta.client.generate_presigned_url")
+    def test_create_datafile_size_exceeded(self, s3_presigned_url_mock):
+        self.client.force_login(self.user)
+        s3_presigned_url_mock.return_value = "http://s3/upload_put_url"
+        request = self.build_file_create_request(size=3147483647)
+        response = self.client.post(reverse("api:file-create"), request)
+        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+        self.assertDictEqual(
+            response.json(),
+            {"size": ["File size exceeds maximum limit of 2GB."]}
+        )
+
     @patch("arkindex.project.aws.s3.Object")
     def test_check_uploaded_datafile(self, s3_object):
         s3_object().content_length = 42
-- 
GitLab