diff --git a/arkindex/process/serializers/files.py b/arkindex/process/serializers/files.py index 32efdb8c4d08eacfd96a3b4e6bbd584cc3b4dcf1..497aa2e5f5a57a7f25cead7153b48b1c0ad91ce0 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 053f36a749aaacb0cd8eaf89cd13e5552c0e3eb2..2d673ad00c3c74a90b823e2a2494c9419301019b 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