Add default next_url value in form submissions delete view

pull/12017/head
Sage Abdullah 2024-07-22 17:13:54 +01:00
rodzic 4bfab460a4
commit 8217124799
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: EB1A33CC51CC0217
2 zmienionych plików z 40 dodań i 7 usunięć

Wyświetl plik

@ -1263,16 +1263,30 @@ class TestDeleteFormSubmission(WagtailTestUtils, TestCase):
self.form_page = Page.objects.get(url_path="/home/contact-us/")
def test_delete_submission_show_confirmation(self):
delete_url = reverse(
"wagtailforms:delete_submissions", args=(self.form_page.id,)
)
list_url = reverse("wagtailforms:list_submissions", args=(self.form_page.id,))
response = self.client.get(
reverse("wagtailforms:delete_submissions", args=(self.form_page.id,))
+ f"?selected-submissions={FormSubmission.objects.first().id}"
)
self.assertEqual(response.status_code, 200)
# Check show confirm page when HTTP method is GET
self.assertTemplateUsed(response, "wagtailforms/confirm_delete.html")
# Check that the deletion has not happened with GET request
self.assertEqual(FormSubmission.objects.count(), 2)
# The delete form should have a 'next' input that points back to the list page
soup = self.get_soup(response.content)
form = soup.select_one(f'form[action^="{delete_url}"]')
self.assertIsNotNone(form)
next_input = form.find("input", {"name": "next"})
self.assertIsNotNone(next_input)
self.assertEqual(next_input.get("value"), list_url)
def test_delete_submission_with_permissions(self):
response = self.client.post(
reverse("wagtailforms:delete_submissions", args=(self.form_page.id,))
@ -1348,12 +1362,33 @@ class TestDeleteFormSubmission(WagtailTestUtils, TestCase):
)
def test_delete_submission_with_next_url(self):
submission_id = FormSubmission.objects.first().id
delete_url = reverse(
"wagtailforms:delete_submissions", args=(self.form_page.id,)
)
list_url = reverse("wagtailforms:list_submissions", args=(self.form_page.id,))
next_url = list_url + "?p=2"
response = self.client.get(
reverse("wagtailforms:delete_submissions", args=(self.form_page.id,))
+ f"?selected-submissions={submission_id}&next={next_url}"
)
self.assertEqual(response.status_code, 200)
# The delete form should have a 'next' input that points back to the list page
# with the same pagination querystring
soup = self.get_soup(response.content)
form = soup.select_one(f'form[action^="{delete_url}"]')
self.assertIsNotNone(form)
next_input = form.find("input", {"name": "next"})
self.assertIsNotNone(next_input)
self.assertEqual(next_input.get("value"), next_url)
# Submitting the form should redirect to the next URL
response = self.client.post(
reverse("wagtailforms:delete_submissions", args=(self.form_page.id,)),
{
"selected-submissions": FormSubmission.objects.first().id,
"selected-submissions": submission_id,
"next": next_url,
},
)

Wyświetl plik

@ -88,7 +88,7 @@ class DeleteSubmissionsView(TemplateView):
template_name = "wagtailforms/confirm_delete.html"
page = None
submissions = None
success_url = "wagtailforms:list_submissions"
success_url_name = "wagtailforms:list_submissions"
def get_queryset(self):
"""Returns a queryset for the selected submissions"""
@ -115,7 +115,7 @@ class DeleteSubmissionsView(TemplateView):
next_url = get_valid_next_url_from_request(self.request)
if next_url:
return next_url
return self.success_url
return reverse(self.success_url_name, args=(self.page.id,))
def dispatch(self, request, *args, **kwargs):
"""Check permissions, set the page and submissions, handle delete"""
@ -130,7 +130,7 @@ class DeleteSubmissionsView(TemplateView):
if self.request.method == "POST":
self.handle_delete(self.submissions)
return redirect(self.get_success_url(), page_id)
return redirect(self.get_success_url())
return super().dispatch(request, *args, **kwargs)
@ -144,9 +144,7 @@ class DeleteSubmissionsView(TemplateView):
"submissions": self.submissions,
}
)
next_url = get_valid_next_url_from_request(self.request)
if next_url:
context["next_url"] = next_url
context["next_url"] = self.get_success_url()
return context