Skip to content

Commit

Permalink
Add serializer for request validation
Browse files Browse the repository at this point in the history
  • Loading branch information
gzurowski committed Oct 22, 2024
1 parent af5fbf3 commit 98cff02
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/paper/serializers/paper_upload_serializer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from rest_framework import serializers


class PaperUploadSerializer(serializers.Serializer):
"""
Serializer for uploading a paper.
Used to validate request data.
"""

filename = serializers.CharField(required=True)
14 changes: 14 additions & 0 deletions src/paper/tests/test_paper_upload_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,17 @@ def test_post(self):
"test.pdf",
request.user.id,
)

def test_post_fails_with_validation_error(self):
# Arrange
request = self.factory.post("/paper/upload/", {})

force_authenticate(request, self.user)

# Act
response = self.view(request, storage_service=self.mock_storage_service)

# Assert
self.assertEqual(response.status_code, 400)
self.assertEqual(response.data, {"filename": ["This field is required."]})
self.mock_storage_service.create_presigned_url.assert_not_called()
5 changes: 5 additions & 0 deletions src/paper/views/paper_upload_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from rest_framework.response import Response
from rest_framework.views import APIView

from paper.serializers.paper_upload_serializer import PaperUploadSerializer
from paper.services.storage_service import StorageService


Expand All @@ -24,6 +25,10 @@ def post(self, request: Request, *args, **kwargs) -> Response:
user = request.user
data = request.data

# Validate request data
serializer = PaperUploadSerializer(data=request.data)
serializer.is_valid(raise_exception=True)

filename = data.get("filename")

presigned_url = self.storage_service.create_presigned_url(filename, user.id)
Expand Down

0 comments on commit 98cff02

Please sign in to comment.