Skip to content
Snippets Groups Projects
Commit 210939d6 authored by Alice Heaton's avatar Alice Heaton :speech_balloon:
Browse files

Merge remote-tracking branch 'origin/tab_registry' into make_view_edit_view_into_tab

parents ea6e0917 f0cd0538
No related branches found
No related tags found
3 merge requests!26Make view edit view into tab,!25Fix upload button,!23Tabbed view header styling
from django.contrib import admin
from .models import TabbedPage, Tab
from .models import TabbedPage, TabInstance
class TabInline(admin.StackedInline):
model = Tab
model = TabInstance
extra = 0
......
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import jsonfield.fields
class Migration(migrations.Migration):
dependencies = [
('tabbed_page', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='TabInstance',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('settings', jsonfield.fields.JSONField(blank=True)),
('view_name', models.CharField(max_length=128)),
('name', models.CharField(max_length=128)),
('default', models.BooleanField(default=False)),
('position', models.PositiveIntegerField(default=0)),
('label', models.CharField(max_length=128)),
('page', models.ForeignKey(to='tabbed_page.TabbedPage')),
],
),
migrations.AlterUniqueTogether(
name='tab',
unique_together=set([]),
),
migrations.RemoveField(
model_name='tab',
name='page',
),
migrations.DeleteModel(
name='Tab',
),
migrations.AlterUniqueTogether(
name='tabinstance',
unique_together=set([('name', 'page')]),
),
]
......@@ -12,10 +12,10 @@ class TabbedPage(models.Model):
return self.name
class Tab(models.Model):
class TabInstance(models.Model):
settings = JSONField(blank=True)
view_name = models.CharField(max_length=128)
page = models.ForeignKey(TabbedPage)
page = models.ForeignKey(TabbedPage, related_name='tabs')
name = models.CharField(max_length=128)
default = models.BooleanField(default=False)
position = models.PositiveIntegerField(default=0)
......
_pool = {}
class MissingTabError(Exception):
pass
def register_tab(name, tab):
global _pool
_pool[name] = tab
def get_tab(name):
global _pool
try:
return _pool[name]
except KeyError:
raise MissingTabError()
def clear_tabs():
# Currently only used in test code
global _pool
_pool = {}
from factory.django import DjangoModelFactory
from factory import fuzzy
from ..models import TabbedPage, Tab
from ..models import TabbedPage, TabInstance
class TabbedPageFactory(DjangoModelFactory):
......@@ -11,9 +11,9 @@ class TabbedPageFactory(DjangoModelFactory):
name = fuzzy.FuzzyText()
class TabFactory(DjangoModelFactory):
class TabInstanceFactory(DjangoModelFactory):
class Meta:
model = Tab
model = TabInstance
name = fuzzy.FuzzyText()
label = fuzzy.FuzzyText()
import pytest
from ..tab_pool import (
register_tab,
get_tab,
clear_tabs,
MissingTabError,
)
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
def test_exception_when_tab_not_registered(tab):
with pytest.raises(MissingTabError):
get_tab('test-tab')
def test_registering_twice_overrides_existing_tab(tab):
register_tab('test-tab', tab)
tab2 = TestTab()
register_tab('test-tab', tab2)
assert get_tab('test-tab') == tab2
......@@ -3,7 +3,7 @@ import pytest
from ..views import TabbedPageView
from .factories import TabbedPageFactory, TabFactory
from .factories import TabbedPageFactory, TabInstanceFactory
@pytest.mark.django_db
......@@ -42,9 +42,9 @@ def test_name_defaults_to_main_when_empty():
@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)
tab3 = TabInstanceFactory(page=page, position=3)
tab1 = TabInstanceFactory(page=page, position=1)
tab2 = TabInstanceFactory(page=page, position=2)
view = TabbedPageView()
view.kwargs = {'name': page.name}
......
......@@ -9,7 +9,7 @@ class TabbedPageView(TemplateView):
@property
def tabs(self):
return self.page.tab_set.all().order_by('position')
return self.page.tabs.all().order_by('position')
@property
def page(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment