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