Skip to content
Snippets Groups Projects
Commit 28819af4 authored by Martin Burchell's avatar Martin Burchell
Browse files

Changed the redirected page following item update:

The next hidden parameter in the form, which determines the redirect
following an update is set to the 'next' query parameter in the form.
If the query parameter does not exist, the HTTP_REFERER is used.
If neither exist, the user gets redirected to the dashboard.
parent d95bfa65
No related branches found
No related tags found
1 merge request!41Delete item from form
......@@ -267,7 +267,21 @@ def test_form_initial_values_set_that_of_item(generic_item):
assert initial['timestamp'] == datetime(2016, 6, 6)
def test_form_next_url_value_set_to_current_url_by_default(generic_item):
def test_form_next_url_is_next_query_parameter(generic_item):
with patch('hid.views.item.transport.items.get') as get_item:
get_item.return_value = generic_item
(view, response) = make_request(
AddEditItemView,
'edit-item',
kwargs={'item_id': 103},
get={'next': 'http://example.com'}
)
initial = view.get_initial()
assert initial['next'] == 'http://example.com'
def test_form_next_url_is_referer_if_no_next_query_parameter(generic_item):
with patch('hid.views.item.transport.items.get') as get_item:
get_item.return_value = generic_item
(view, response) = make_request(
......@@ -276,22 +290,23 @@ def test_form_next_url_value_set_to_current_url_by_default(generic_item):
kwargs={'item_id': 103}
)
view.request.META['HTTP_REFERER'] = '/view-edit/main/rumors'
initial = view.get_initial()
assert initial['next'] == reverse('edit-item', kwargs={'item_id': 103})
assert initial['next'] == '/view-edit/main/rumors'
def test_form_next_url_value_set_to_provided_url(generic_item):
def test_form_next_url_is_dashboard_if_nothing_else_set(generic_item):
with patch('hid.views.item.transport.items.get') as get_item:
get_item.return_value = generic_item
(view, response) = make_request(
AddEditItemView,
'edit-item',
kwargs={'item_id': 103},
get={'next': 'http://example.com'}
kwargs={'item_id': 103}
)
initial = view.get_initial()
assert initial['next'] == 'http://example.com'
assert initial['next'] == reverse('dashboard')
def test_context_data_includes_the_item(generic_item):
......@@ -486,10 +501,7 @@ def test_item_term_delete_transport_exception_logs_message(view, form):
@pytest.mark.django_db
def test_item_can_be_deleted(view, form):
view.request.POST['next'] = '/'
response = view._delete_item()
assert response.url == '/'
view._delete_item()
assert_message(view.request,
messages.SUCCESS,
......@@ -499,3 +511,24 @@ def test_item_can_be_deleted(view, form):
transport.items.get(view.item['id'])
assert excinfo.value.message['status_code'] == 404
@pytest.mark.django_db
def test_redirected_to_next_if_present_after_delete(view, form):
view.request.POST['next'] = '/view-edit/main/questions/'
response = view._delete_item()
assert response.url == '/view-edit/main/questions/'
@pytest.mark.django_db
def test_redirected_to_home_if_next_absent_after_delete(
view, form):
# Do we need this ?
# 'next' should always be present in the form so this
# should never happen
response = view._delete_item()
assert response.url == '/'
from django.contrib import messages
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.utils.translation import ugettext as _
from django.views.generic.edit import FormView
......@@ -96,7 +97,9 @@ class AddEditItemView(FormView):
'id': self.item['id'],
'body': self.item['body'],
'timestamp': self.item['timestamp'],
'next': self.request.GET.get('next', self.request.path)
'next': self.request.GET.get(
'next',
self.request.META.get('HTTP_REFERER', reverse('dashboard'))),
}
item_type = getattr(self, 'item_type', None)
......@@ -215,7 +218,7 @@ class AddEditItemView(FormView):
item_description = self._get_item_description()
return self._response(
self.request.POST['next'],
self._get_next_url_for_delete(),
messages.SUCCESS,
_("%s %d successfully deleted.") % (
item_description,
......@@ -223,6 +226,11 @@ class AddEditItemView(FormView):
)
)
def _get_next_url_for_delete(self):
next_url = self.request.POST.get('next', reverse('dashboard'))
return next_url
def _get_item_description(self):
if self.item_type:
return self.item_type['long_name']
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment