From 8c0914d19d9510d8e8865ce3c518eba3301cdade Mon Sep 17 00:00:00 2001 From: Martin Burchell <martinb@aptivate.org> Date: Wed, 5 Aug 2015 16:29:17 +0100 Subject: [PATCH] Initial implementation of tab template tag --- .../tabbed_page/templatetags/__init__.py | 0 .../tabbed_page/templatetags/render_tab.py | 11 ++++ .../tabbed_page/tests/registration_tests.py | 11 +--- .../website/tabbed_page/tests/render_tests.py | 57 +++++++++++++++++++ 4 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 django/website/tabbed_page/templatetags/__init__.py create mode 100644 django/website/tabbed_page/templatetags/render_tab.py create mode 100644 django/website/tabbed_page/tests/render_tests.py diff --git a/django/website/tabbed_page/templatetags/__init__.py b/django/website/tabbed_page/templatetags/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/django/website/tabbed_page/templatetags/render_tab.py b/django/website/tabbed_page/templatetags/render_tab.py new file mode 100644 index 00000000..e5d3c3fe --- /dev/null +++ b/django/website/tabbed_page/templatetags/render_tab.py @@ -0,0 +1,11 @@ +from django.template.loader import render_to_string + +from ..tab_pool import get_tab + + +def render_tab(tab_instance): + tab = get_tab(tab_instance.name) + + template_name = tab.template_name + + return render_to_string(template_name, {}) diff --git a/django/website/tabbed_page/tests/registration_tests.py b/django/website/tabbed_page/tests/registration_tests.py index 587e12da..e3da0d5d 100644 --- a/django/website/tabbed_page/tests/registration_tests.py +++ b/django/website/tabbed_page/tests/registration_tests.py @@ -7,20 +7,13 @@ from ..tab_pool import ( MissingTabError, ) +from .test_tab import TestTab, tab + def setup_function(function): clear_tabs() -class TestTab(object): - pass - - -@pytest.fixture -def tab(): - return TestTab() - - def test_tab_is_registered(tab): register_tab('test-tab', tab) assert get_tab('test-tab') == tab diff --git a/django/website/tabbed_page/tests/render_tests.py b/django/website/tabbed_page/tests/render_tests.py new file mode 100644 index 00000000..02705f0d --- /dev/null +++ b/django/website/tabbed_page/tests/render_tests.py @@ -0,0 +1,57 @@ +from mock import patch +import pytest + +from .factories import ( + TabbedPageFactory, + TabInstanceFactory, +) +from ..tab_pool import register_tab +from ..templatetags.render_tab import render_tab + +from .test_tab import TestTab + + +class MockTabInstance(object): + pass + + +@pytest.fixture +def render_to_string_method(): + return 'tabbed_page.templatetags.render_tab.render_to_string' + + +def get_mock_render_to_string_parameter(mock, parameter): + """ Helper function to return arguments a mock instance + of render_to_string has been invoked with. + + Args: + mock: A Mock object + parameter: either 'template_name' or 'context' + Returns: + The value of the given parameter for the last invocation + of the given mock with the render_to_string signature. + Raises: + ValueError: If parameter is not 'template_name' or 'context' + """ + if parameter == 'template_name': + return mock.call_args[0][0] + elif parameter == 'context': + return mock.call_args[0][1] + else: + raise ValueError() + + +@pytest.mark.django_db +def test_uses_template_name(render_to_string_method): + tab = TestTab(template_name='test-tab-template') + register_tab('test-tab', tab) + + page = TabbedPageFactory() + tab_instance = TabInstanceFactory(page=page, name='test-tab') + + with patch(render_to_string_method) as mock: + render_tab(tab_instance) + template_name = get_mock_render_to_string_parameter( + mock, 'template_name' + ) + assert template_name == 'test-tab-template' -- GitLab