From b097eaa24fefd5d2a7c5bc7586ea09fc40239bd2 Mon Sep 17 00:00:00 2001 From: Martin Burchell <martinb@aptivate.org> Date: Thu, 6 Aug 2015 11:35:27 +0100 Subject: [PATCH] Modified render_tab to have access to the request Also refactored some of the tests to pick out the args of interest sent to render_string --- .../tabbed_page/templatetags/render_tab.py | 18 +++++++++-- .../website/tabbed_page/tests/render_tests.py | 32 +++++++++++++++---- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/django/website/tabbed_page/templatetags/render_tab.py b/django/website/tabbed_page/templatetags/render_tab.py index c735d427..180d8650 100644 --- a/django/website/tabbed_page/templatetags/render_tab.py +++ b/django/website/tabbed_page/templatetags/render_tab.py @@ -1,9 +1,14 @@ +from django import template from django.template.loader import render_to_string from ..tab_pool import get_tab -def render_tab(tab_instance): +register = template.Library() + + +@register.simple_tag(takes_context=True) +def render_tab(context, tab_instance): tab = get_tab(tab_instance.name) template_name = tab.template_name @@ -13,6 +18,13 @@ def render_tab(tab_instance): else: settings = {} # TODO: json field doesn't default to this? - context = tab.get_context_data(**settings) + tab_details = tab.get_context_data(**settings) + + if context: # TODO: Only used for testing? + request = context.get('request') + else: + request = None - return render_to_string(template_name, context) + return render_to_string(template_name, + context=tab_details, + request=request) diff --git a/django/website/tabbed_page/tests/render_tests.py b/django/website/tabbed_page/tests/render_tests.py index 2084d2f9..dc22ff9f 100644 --- a/django/website/tabbed_page/tests/render_tests.py +++ b/django/website/tabbed_page/tests/render_tests.py @@ -27,9 +27,10 @@ def test_uses_template_name(mock_render): page = TabbedPageFactory() tab_instance = TabInstanceFactory(page=page, name='test-tab') - render_tab(tab_instance) + render_tab(None, tab_instance) - mock_render.assert_called_once_with('test-tab-template', {}) + args, _ = mock_render.call_args + assert args[0] == 'test-tab-template' @pytest.mark.django_db @@ -44,9 +45,27 @@ def test_uses_context(mock_render): tab_instance = TabInstanceFactory(page=page, name='test-tab') - render_tab(tab_instance) + render_tab(None, tab_instance) - mock_render.assert_called_once_with(None, test_context) + _, kwargs = mock_render.call_args + assert kwargs['context'] == test_context + + +@pytest.mark.django_db +@patch(render_to_string_method) +def test_uses_request(mock_render): + tab = TestTab() + register_tab('test-tab', tab) + + page = TabbedPageFactory() + tab_instance = TabInstanceFactory(page=page, name='test-tab') + + request = 'a request' + context = {'request': request} + render_tab(context, tab_instance) + + _, kwargs = mock_render.call_args + assert kwargs['request'] == request @pytest.mark.django_db @@ -62,6 +81,7 @@ def test_settings_passed_to_widget_get_context_data(render_to_string_method): tab_instance = TabInstanceFactory(page=page, name='test-tab', settings=settings) - render_tab(tab_instance) + render_tab(None, tab_instance) - mock_get_context.assert_called_once_with(columns=columns) + _, kwargs = mock_get_context.call_args + assert kwargs['columns'] == columns -- GitLab