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 c377259ca168c2b448b3cd925ea7f04f7cb29dfb..0e67aa8d761c1c8d02679a327385f83b9419eb99 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 9c18dae0bd6b8bac7d8a1546ac19fe4becd09fce..4ae233e4497e4c657586de4355d231af85114637 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 a18132958ddf9f8514c792f71fc169518127d2f7..6adbd83320a4235befe2ff99c2ee61bc4cb35620 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 b5f5bd3e0faf9fe32be87a0dc5faf987c5013e86..59206fc92633578dda2ce5146def693d6d978864 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