diff --git a/django/website/tabbed_page/templatetags/render_tab.py b/django/website/tabbed_page/templatetags/render_tab.py index c735d427f824568c0033d2679cae5e70dc97044b..180d86506a25ae90610f4ac2e617d21074a6ec9c 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 2084d2f913e9e0ce0d77fceab040ad4abb8e5eeb..dc22ff9f80b58d6a3f4aa49f94ed514e6b9b6147 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