Add POST/Redirect/GET for Domains dashboard

Currently, "Set Domain Context" and "Clear Domain Context" doesn't do
PRG, so page reload after these actions produce browser popup about form
re-submission. Proposed patch fixes it

Change-Id: I80d11cbdd42224456ee3a354ebad556a318ba03a
This commit is contained in:
Vadym Markov 2021-07-26 18:46:02 +03:00
parent 9ba9a54d0f
commit c80d7e32ef
2 changed files with 12 additions and 2 deletions

View File

@ -15,6 +15,7 @@
import logging import logging
from django.conf import settings from django.conf import settings
from django import shortcuts
from django.template import defaultfilters as filters from django.template import defaultfilters as filters
from django.urls import reverse from django.urls import reverse
from django.utils.http import urlencode from django.utils.http import urlencode
@ -246,9 +247,11 @@ class SetDomainContext(tables.Action):
messages.success(request, messages.success(request,
_('Domain Context updated to Domain %s.') % _('Domain Context updated to Domain %s.') %
domain.name) domain.name)
return shortcuts.redirect(request.get_full_path())
except Exception: except Exception:
messages.error(request, messages.error(request,
_('Unable to set Domain Context.')) _('Unable to set Domain Context.'))
return shortcuts.redirect(request.get_full_path())
class UnsetDomainContext(tables.Action): class UnsetDomainContext(tables.Action):
@ -268,6 +271,7 @@ class UnsetDomainContext(tables.Action):
request.session.pop("domain_context") request.session.pop("domain_context")
request.session.pop("domain_context_name") request.session.pop("domain_context_name")
messages.success(request, _('Domain Context cleared.')) messages.success(request, _('Domain Context cleared.'))
return shortcuts.redirect(request.get_full_path())
class DomainsTable(tables.DataTable): class DomainsTable(tables.DataTable):

View File

@ -153,15 +153,21 @@ class DomainsViewTests(test.BaseAdminViewTests):
self.mock_domain_list.return_value = self.domains.list() self.mock_domain_list.return_value = self.domains.list()
formData = {'action': 'domains__set_domain_context__%s' % domain.id} formData = {'action': 'domains__set_domain_context__%s' % domain.id}
res = self.client.post(DOMAINS_INDEX_URL, formData) res = self.client.post(DOMAINS_INDEX_URL, formData, follow=True)
self.assertRedirects(res, DOMAINS_INDEX_URL, status_code=302,
target_status_code=200,
fetch_redirect_response=True)
self.assertTemplateUsed(res, constants.DOMAINS_INDEX_VIEW_TEMPLATE) self.assertTemplateUsed(res, constants.DOMAINS_INDEX_VIEW_TEMPLATE)
self.assertCountEqual(res.context['table'].data, [domain, ]) self.assertCountEqual(res.context['table'].data, [domain, ])
self.assertContains(res, "<em>another_test_domain:</em>") self.assertContains(res, "<em>another_test_domain:</em>")
formData = {'action': 'domains__clear_domain_context__%s' % domain.id} formData = {'action': 'domains__clear_domain_context__%s' % domain.id}
res = self.client.post(DOMAINS_INDEX_URL, formData) res = self.client.post(DOMAINS_INDEX_URL, formData, follow=True)
self.assertRedirects(res, DOMAINS_INDEX_URL, status_code=302,
target_status_code=200,
fetch_redirect_response=True)
self.assertTemplateUsed(res, constants.DOMAINS_INDEX_VIEW_TEMPLATE) self.assertTemplateUsed(res, constants.DOMAINS_INDEX_VIEW_TEMPLATE)
self.assertCountEqual(res.context['table'].data, self.domains.list()) self.assertCountEqual(res.context['table'].data, self.domains.list())
self.assertNotContains(res, "<em>test_domain:</em>") self.assertNotContains(res, "<em>test_domain:</em>")