From ee74795c8875222a72f5af422d4ae6f4144c285c Mon Sep 17 00:00:00 2001 From: Martin Burchell <martinb@aptivate.org> Date: Wed, 5 Aug 2015 12:27:29 +0100 Subject: [PATCH] Initial stab at view for tabbed page The template is a temporary one for now --- .../templates/tabbed_page/tabbed_page.html | 9 ++++- django/website/tabbed_page/tests/factories.py | 10 ++++- .../website/tabbed_page/tests/view_tests.py | 39 ++++++++++++------- django/website/tabbed_page/views.py | 21 +++++++--- 4 files changed, 56 insertions(+), 23 deletions(-) diff --git a/django/website/tabbed_page/templates/tabbed_page/tabbed_page.html b/django/website/tabbed_page/templates/tabbed_page/tabbed_page.html index c377259c..0e67aa8d 100644 --- a/django/website/tabbed_page/templates/tabbed_page/tabbed_page.html +++ b/django/website/tabbed_page/templates/tabbed_page/tabbed_page.html @@ -5,6 +5,11 @@ {% block maincontent %} <h1 class="page-header"><span class="fa fa-tabbed-page fa-fw"></span>{% trans "Tabbed Page" %}</h1> - <h2>{{ view }}</h2> - <h3>{{ view.name }}</h3> + <h2>Page = {{ view.page }}</h2> + + <ul> + {% for tab in view.tabs %} + <li>{{ tab }}</li> + {% endfor %} + </ul> {% endblock maincontent %} diff --git a/django/website/tabbed_page/tests/factories.py b/django/website/tabbed_page/tests/factories.py index 9c18dae0..4ae233e4 100644 --- a/django/website/tabbed_page/tests/factories.py +++ b/django/website/tabbed_page/tests/factories.py @@ -1,7 +1,7 @@ from factory.django import DjangoModelFactory from factory import fuzzy -from ..models import TabbedPage +from ..models import TabbedPage, Tab class TabbedPageFactory(DjangoModelFactory): @@ -9,3 +9,11 @@ class TabbedPageFactory(DjangoModelFactory): model = TabbedPage name = fuzzy.FuzzyText() + + +class TabFactory(DjangoModelFactory): + class Meta: + model = Tab + + name = fuzzy.FuzzyText() + label = fuzzy.FuzzyText() diff --git a/django/website/tabbed_page/tests/view_tests.py b/django/website/tabbed_page/tests/view_tests.py index a1813295..6adbd833 100644 --- a/django/website/tabbed_page/tests/view_tests.py +++ b/django/website/tabbed_page/tests/view_tests.py @@ -1,41 +1,52 @@ from __future__ import unicode_literals, absolute_import - import pytest -from django.core.urlresolvers import reverse -from django.test import RequestFactory - - -from django.core.urlresolvers import RegexURLResolver, NoReverseMatch - from ..views import TabbedPageView -from .factories import TabbedPageFactory +from .factories import TabbedPageFactory, TabFactory @pytest.mark.django_db -def test_name_is_name_of_page(): +def test_page_stored_on_view(): page = TabbedPageFactory() + TabbedPageFactory() view = TabbedPageView() view.kwargs = {'name': page.name} - assert view.page_name == page.name + assert view.page == page @pytest.mark.django_db -def test_name_defaults_to_main_when_not_set(): +def test_page_defaults_to_main_when_not_set(): + page = TabbedPageFactory(name='main') + TabbedPageFactory(name='other') view = TabbedPageView() view.kwargs = {} - assert view.page_name == 'main' + assert view.page == page @pytest.mark.django_db -def test_name_defaults_to_main_when_not_empty(): +def test_name_defaults_to_main_when_empty(): + page = TabbedPageFactory(name='main') + TabbedPageFactory(name='other') view = TabbedPageView() view.kwargs = {'name': ''} - assert view.page_name == 'main' + assert view.page == page + + +@pytest.mark.django_db +def test_widgets_stored_on_view_in_position_order(): + page = TabbedPageFactory() + tab3 = TabFactory(page=page, position=3) + tab1 = TabFactory(page=page, position=1) + tab2 = TabFactory(page=page, position=2) + + view = TabbedPageView() + view.kwargs = {'name': page.name} + + assert list(view.tabs) == [tab1, tab2, tab3] diff --git a/django/website/tabbed_page/views.py b/django/website/tabbed_page/views.py index b5f5bd3e..59206fc9 100644 --- a/django/website/tabbed_page/views.py +++ b/django/website/tabbed_page/views.py @@ -5,13 +5,22 @@ from .models import TabbedPage class TabbedPageView(TemplateView): template_name = "tabbed_page/tabbed_page.html" + _page = None @property - def page_name(self): - name = self.kwargs.get('name') + def tabs(self): + return self.page.tab_set.all().order_by('position') - if name: - page = TabbedPage.objects.get(name=name) - return page.name + @property + def page(self): + if self._page is None: + name = self.kwargs.get('name') + + # TODO: check if name can ever be empty string + # if not, can just put default in get() above + if not name: + name = 'main' + + self._page = TabbedPage.objects.get(name=name) - return 'main' + return self._page -- GitLab