Skip to content

Commit 9aa22ee

Browse files
authored
[ENG-8193] Fix issues with Preprint submission via API (#11185)
## Purpose handle django core ValidationError in drf view ## Ticket https://openscience.atlassian.net/browse/ENG-8193
1 parent ef9c076 commit 9aa22ee

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

api/actions/views.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
from django.core.exceptions import ValidationError as DjangoValidationError
12
from guardian.shortcuts import get_objects_for_user
23
from rest_framework import generics
34
from rest_framework import permissions
4-
from rest_framework.exceptions import NotFound, PermissionDenied
5+
from rest_framework.exceptions import NotFound, PermissionDenied, ValidationError
56

67
from api.actions.permissions import ReviewActionPermission
78
from api.actions.serializers import NodeRequestActionSerializer, ReviewActionSerializer, PreprintRequestActionSerializer
@@ -186,7 +187,10 @@ def perform_create(self, serializer):
186187
),
187188
)
188189

189-
serializer.save(user=self.request.user)
190+
try:
191+
serializer.save(user=self.request.user)
192+
except (ValueError, DjangoValidationError) as exc:
193+
raise ValidationError(str(exc)) from exc
190194

191195
# overrides ListFilterMixin
192196
def get_default_queryset(self):

api_tests/actions/views/test_action_list.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,3 +366,38 @@ def test_invalid_target_id(self, app, moderator):
366366
expect_errors=True
367367
)
368368
assert res.status_code == 404
369+
370+
def test_submit_preprint_without_files_returns_400(self, app, url, preprint, node_admin):
371+
# Ensure preprint has no files
372+
preprint.primary_file = None
373+
preprint.save()
374+
375+
submit_payload = self.create_payload(
376+
preprint._id,
377+
trigger='submit'
378+
)
379+
380+
res = app.post_json_api(
381+
url,
382+
submit_payload,
383+
auth=node_admin.auth,
384+
expect_errors=True
385+
)
386+
assert res.status_code == 400
387+
388+
def test_provider_not_reviewed_returns_409(self, app, url, preprint, node_admin):
389+
preprint.provider = PreprintProviderFactory(reviews_workflow=None)
390+
preprint.save()
391+
392+
submit_payload = self.create_payload(
393+
preprint._id,
394+
trigger='submit'
395+
)
396+
397+
res = app.post_json_api(
398+
url,
399+
submit_payload,
400+
auth=node_admin.auth,
401+
expect_errors=True
402+
)
403+
assert res.status_code == 409

0 commit comments

Comments
 (0)