diff --git a/django/website/hid/forms.py b/django/website/hid/forms.py index 53e616220fe1ebb2a3a7b73869a631e99079094b..a78f684fa4dc729c9f75a6fbc06f627d2920f96d 100644 --- a/django/website/hid/forms.py +++ b/django/website/hid/forms.py @@ -6,4 +6,6 @@ class UploadForm(forms.Form): source = forms.ChoiceField(choices=get_spreadsheet_choices, widget=forms.HiddenInput, required=True) + next = forms.CharField(widget=forms.HiddenInput, + required=True) file = forms.FileField() diff --git a/django/website/hid/tabs/view_and_edit_table.py b/django/website/hid/tabs/view_and_edit_table.py index bd807944101070619fad781cd1d5bba530eab7d5..37ec8d69e4d2c1c7440b47e3b74f4fd08b1d9a7f 100644 --- a/django/website/hid/tabs/view_and_edit_table.py +++ b/django/website/hid/tabs/view_and_edit_table.py @@ -138,7 +138,18 @@ class ViewAndEditTableTab(object): ) # Build the upload form - upload_form = UploadForm(initial={'source': 'geopoll'}) + source = kwargs.get('source') + next_url = reverse( + 'tabbed-page', + kwargs={ + 'name': tab_instance.page.name, + 'tab_name': tab_instance.name, + }) + + upload_form = UploadForm(initial={ + 'source': source, + 'next': next_url, + }) # Build the actions drop down actions = [ diff --git a/django/website/hid/tests/upload_view_tests.py b/django/website/hid/tests/upload_view_tests.py new file mode 100644 index 0000000000000000000000000000000000000000..5075afda1a9de8cc24e0daa1a54069d381172510 --- /dev/null +++ b/django/website/hid/tests/upload_view_tests.py @@ -0,0 +1,17 @@ +from mock import Mock + +from django.core.urlresolvers import reverse + +from ..views import UploadSpreadsheetView + + +def test_redirects_to_next_url_after_upload(): + next_url = reverse('tabbed-page', + kwargs={'name': 'main', 'tab_name': 'rumors'}) + + view = UploadSpreadsheetView() + view.request = Mock(POST={'next': next_url}) + + url = view.get_success_url() + + assert url == next_url diff --git a/django/website/hid/tests/views_tests.py b/django/website/hid/tests/views_tests.py index 0252bd8bca7788ee6fdd3767c653c5dffbdcd3f0..981526ff0e2353d3110ec5a4cb366e3fd4ed8b34 100644 --- a/django/website/hid/tests/views_tests.py +++ b/django/website/hid/tests/views_tests.py @@ -1,3 +1,4 @@ +from mock import Mock import pytest from django.contrib.messages.storage.fallback import FallbackStorage @@ -13,6 +14,11 @@ from hid.tabs.view_and_edit_table import ( DELETE_COMMAND ) +from tabbed_page.tests.factories import ( + TabbedPageFactory, + TabInstanceFactory +) + from taxonomies.tests.factories import ( TaxonomyFactory, TermFactory, @@ -167,6 +173,40 @@ def test_get_category_options_orders_by_lowercase_name(): assert options == expected +@pytest.mark.django_db +def test_upload_form_source_read_from_settings(): + page = TabbedPageFactory() + tab_instance = TabInstanceFactory(page=page) + request = Mock(GET={}) + tab = ViewAndEditTableTab() + + context_data = tab.get_context_data(tab_instance, + request, + source='rapidpro') + + form = context_data['upload_form'] + assert form.initial.get('source') == 'rapidpro' + + +@pytest.mark.django_db +def test_upload_form_next_url_read_from_tab_instance(): + page = TabbedPageFactory(name='main') + tab_instance = TabInstanceFactory(page=page, name='rumors') + request = Mock(GET={}) + tab = ViewAndEditTableTab() + + context_data = tab.get_context_data(tab_instance, + request, + source='rapidpro') + + form = context_data['upload_form'] + + expected_url = reverse('tabbed-page', + kwargs={'name': 'main', 'tab_name': 'rumors'}) + + assert form.initial.get('next') == expected_url + + def test_views_item_get_request_parameters_renames_items_of_active_location(): query = QueryDict( 'action=something-bottom&item-top=top-value&item-bottom=bottom-value' diff --git a/django/website/hid/views.py b/django/website/hid/views.py index e3135377d67dfbf88814881cc5a80566a8cf1d0a..965dad7f5dbc8f6258bce0eb99799cf6b1487358 100644 --- a/django/website/hid/views.py +++ b/django/website/hid/views.py @@ -33,7 +33,7 @@ class UploadSpreadsheetView(FormView): template_name = "hid/upload.html" def get_success_url(self): - return reverse("tabbed-page", name="main", tab_name="all") + return self.request.POST.get('next') def form_valid(self, form): data = form.cleaned_data diff --git a/django/website/tabbed_page/templatetags/render_tab.py b/django/website/tabbed_page/templatetags/render_tab.py index 7cdfe45506cebe26a7488c7408d461b8a36b12c6..c0fc3026d6c8ebd0ddf5bf71b558ab0eee55fa48 100644 --- a/django/website/tabbed_page/templatetags/render_tab.py +++ b/django/website/tabbed_page/templatetags/render_tab.py @@ -36,7 +36,7 @@ def _get_rendering_details(context, tab_instance): if tab_instance.settings: settings = tab_instance.settings else: - settings = {} # TODO: json field doesn't default to this? + settings = {} request = context.get('request') diff --git a/django/website/tabbed_page/tests/factories.py b/django/website/tabbed_page/tests/factories.py index 3e5f1d94dbf8b99e316b53f5e445cc9d82158a3c..ed0a3ab6910100e77ba90bb3513c234ed9017894 100644 --- a/django/website/tabbed_page/tests/factories.py +++ b/django/website/tabbed_page/tests/factories.py @@ -15,6 +15,7 @@ class TabbedPageFactory(DjangoModelFactory): class TabInstanceFactory(DjangoModelFactory): class Meta: model = TabInstance + django_get_or_create = ('name',) name = fuzzy.FuzzyText() label = fuzzy.FuzzyText() diff --git a/django/website/tabbed_page/tests/render_tests.py b/django/website/tabbed_page/tests/render_tests.py index 24614e4df1a11ce2496e14655d1b0496fdc5c913..5c7219a827f7fb22c14b038a900eb9a587c5390a 100644 --- a/django/website/tabbed_page/tests/render_tests.py +++ b/django/website/tabbed_page/tests/render_tests.py @@ -26,7 +26,6 @@ def setup_function(function): clear_tabs() - @pytest.mark.django_db @patch(render_to_string_method) def test_uses_template_name(mock_render): diff --git a/django/website/tabbed_page/views.py b/django/website/tabbed_page/views.py index b6ba7901d929042f9b57dcf9763e9f8334463c40..eebbd535a7d2dc531263b3d987a5705a3a0aca66 100644 --- a/django/website/tabbed_page/views.py +++ b/django/website/tabbed_page/views.py @@ -32,9 +32,9 @@ class TabbedPageView(TemplateView): candidates = [] tab_name = self.kwargs.get('tab_name') if tab_name: - candidates = self.page.tabs.all().filter(name=tab_name) + candidates = self.page.tabs.filter(name=tab_name) if len(candidates) == 0: - candidates = self.page.tabs.all().filter(default=True) + candidates = self.page.tabs.filter(default=True) if len(candidates) == 0: candidates = self.page.tabs.all() if len(candidates) > 0: