Skip to content

Commit 42d8066

Browse files
authored
Fix erroring-responses on oddly-used endpoints. (#167)
* Fix bug where approver appeared to be able to aprove a service twice. Then got an error if they actually did it. * Handle request_decide POST when request has already been actioned. * post not get. * Pass in service to redirect_to_service. * Return the redirect correctly.
1 parent b61128d commit 42d8066

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

jasmin_services/views/grant_review.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def grant_review(request, pk):
4141
and not request.user.has_perm(permission, grant.access.role)
4242
):
4343
messages.error(request, "Grant does not exist")
44-
return redirect_to_service(grant.role.service, "service_details")
44+
return redirect_to_service(grant.access.role.service, "service_details")
4545
# If the grant is expired or revoked, redirect to the list of users
4646
if not grant.active or grant.expired or grant.revoked:
4747
messages.info(request, "This grant has already been rekoved or expired")

jasmin_services/views/request_decide.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import asgiref.sync
22
import django.contrib.auth.mixins
3+
import django.contrib.messages
34
import django.db
5+
import django.http
46
import django.urls
57
import django.views.generic.edit
68

@@ -32,6 +34,27 @@ def setup(self, request, *args, **kwargs):
3234
self.object.access.role.service.category.name, self.object.access.role.service.name
3335
)
3436

37+
def request_already_actioned(self, request):
38+
"""Generate a response for the case where the request has already been actioned."""
39+
django.contrib.messages.add_message(
40+
request, django.contrib.messages.INFO, "The request has already been approved."
41+
)
42+
return django.http.HttpResponseRedirect(
43+
f"/services/{self.service.category.name}/{self.service.name}/requests/"
44+
)
45+
46+
def get(self, request, *args, **kwargs):
47+
"""Override get to deal with case where request has been actioned already."""
48+
if self.object.state != "PENDING":
49+
return self.request_already_actioned(request)
50+
return super().get(request, *args, **kwargs)
51+
52+
def post(self, request, *args, **kwargs):
53+
"""Override post to deal with case where request has been actioned already."""
54+
if self.object.state != "PENDING":
55+
return self.request_already_actioned(request)
56+
return super().post(request, *args, **kwargs)
57+
3558
def test_func(self):
3659
"""Define the test for the UserPassesTestMixin.
3760

0 commit comments

Comments
 (0)