support multiple uses of the mixin class (#140)
This commit is contained in:
committed by
Rob Moorman
parent
4deaaa985f
commit
99d2e4a347
@ -103,7 +103,7 @@ class PersonalisablePageMixin(models.Model):
|
|||||||
blank=True, null=True
|
blank=True, null=True
|
||||||
)
|
)
|
||||||
segment = models.ForeignKey(
|
segment = models.ForeignKey(
|
||||||
Segment, related_name='segments', on_delete=models.PROTECT,
|
Segment, related_name='+', on_delete=models.PROTECT,
|
||||||
blank=True, null=True
|
blank=True, null=True
|
||||||
)
|
)
|
||||||
is_segmented = models.BooleanField(default=False)
|
is_segmented = models.BooleanField(default=False)
|
||||||
|
@ -4,12 +4,20 @@ import factory
|
|||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
from wagtail_factories.factories import MP_NodeFactory
|
from wagtail_factories.factories import MP_NodeFactory
|
||||||
|
|
||||||
from tests.sandbox.pages.models import HomePage
|
from tests.sandbox.pages.models import HomePage, SpecialPage
|
||||||
|
|
||||||
|
|
||||||
class PageFactory(MP_NodeFactory):
|
class HomePageFactory(MP_NodeFactory):
|
||||||
title = 'Test page'
|
title = 'Test page'
|
||||||
slug = factory.LazyAttribute(lambda obj: slugify(obj.title))
|
slug = factory.LazyAttribute(lambda obj: slugify(obj.title))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = HomePage
|
model = HomePage
|
||||||
|
|
||||||
|
|
||||||
|
class SpecialPageFactory(MP_NodeFactory):
|
||||||
|
title = 'Test page'
|
||||||
|
slug = factory.LazyAttribute(lambda obj: slugify(obj.title))
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = SpecialPage
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
import factory
|
import factory
|
||||||
from wagtail.wagtailcore.models import Site
|
from wagtail.wagtailcore.models import Site
|
||||||
|
|
||||||
from tests.factories.page import PageFactory
|
from tests.factories.page import HomePageFactory
|
||||||
|
|
||||||
|
|
||||||
class SiteFactory(factory.DjangoModelFactory):
|
class SiteFactory(factory.DjangoModelFactory):
|
||||||
hostname = 'localhost'
|
hostname = 'localhost'
|
||||||
port = factory.Sequence(lambda n: 81 + n)
|
port = factory.Sequence(lambda n: 81 + n)
|
||||||
site_name = 'Test site'
|
site_name = 'Test site'
|
||||||
root_page = factory.SubFactory(PageFactory, parent=None)
|
root_page = factory.SubFactory(HomePageFactory, parent=None)
|
||||||
is_default_site = False
|
is_default_site = False
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from django.contrib.auth.models import AnonymousUser
|
from django.contrib.auth.models import AnonymousUser
|
||||||
from django.contrib.messages.storage.fallback import FallbackStorage
|
from django.contrib.messages.storage.fallback import FallbackStorage
|
||||||
from django.contrib.sessions.backends.db import SessionStore
|
from django.contrib.sessions.backends.db import SessionStore
|
||||||
from django.test.client import RequestFactory as BaseRequestFactory
|
from django.test.client import RequestFactory as BaseRequestFactory
|
||||||
from tests.factories.page import PageFactory
|
|
||||||
|
from tests.factories.page import HomePageFactory, SpecialPageFactory
|
||||||
from tests.factories.segment import SegmentFactory
|
from tests.factories.segment import SegmentFactory
|
||||||
from tests.factories.site import SiteFactory
|
from tests.factories.site import SiteFactory
|
||||||
|
|
||||||
@ -12,14 +12,16 @@ from tests.factories.site import SiteFactory
|
|||||||
@pytest.fixture(scope='function')
|
@pytest.fixture(scope='function')
|
||||||
def site():
|
def site():
|
||||||
site = SiteFactory(is_default_site=True)
|
site = SiteFactory(is_default_site=True)
|
||||||
PageFactory(parent=site.root_page, slug='page-1')
|
page1 = HomePageFactory(parent=site.root_page, slug='page-1')
|
||||||
PageFactory(parent=site.root_page, slug='page-2')
|
page2 = HomePageFactory(parent=site.root_page, slug='page-2')
|
||||||
|
SpecialPageFactory(parent=page1, slug='page-1-1')
|
||||||
|
SpecialPageFactory(parent=page2, slug='page-2-1')
|
||||||
return site
|
return site
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def segmented_page(site):
|
def segmented_page(site):
|
||||||
page = PageFactory(parent=site.root_page)
|
page = HomePageFactory(parent=site.root_page)
|
||||||
segment = SegmentFactory()
|
segment = SegmentFactory()
|
||||||
return page.copy_for_segment(segment)
|
return page.copy_for_segment(segment)
|
||||||
|
|
||||||
|
40
tests/sandbox/pages/migrations/0002_auto_20170531_0915.py
Normal file
40
tests/sandbox/pages/migrations/0002_auto_20170531_0915.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.11.1 on 2017-05-31 09:15
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
import wagtail.wagtailcore.fields
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('wagtail_personalisation', '0009_auto_20170531_0428'),
|
||||||
|
('wagtailcore', '0033_remove_golive_expiry_help_text'),
|
||||||
|
('pages', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='SpecialPage',
|
||||||
|
fields=[
|
||||||
|
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
|
||||||
|
('is_segmented', models.BooleanField(default=False)),
|
||||||
|
('subtitle', models.CharField(blank=True, default='', max_length=255)),
|
||||||
|
('body', wagtail.wagtailcore.fields.RichTextField(blank=True, default='')),
|
||||||
|
('special', wagtail.wagtailcore.fields.RichTextField(blank=True, default='')),
|
||||||
|
('canonical_page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='variations', to='pages.SpecialPage')),
|
||||||
|
('segment', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='wagtail_personalisation.Segment')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=('wagtailcore.page', models.Model),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='homepage',
|
||||||
|
name='segment',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='wagtail_personalisation.Segment'),
|
||||||
|
),
|
||||||
|
]
|
@ -16,3 +16,15 @@ class HomePage(PersonalisablePageMixin, Page):
|
|||||||
FieldPanel('subtitle'),
|
FieldPanel('subtitle'),
|
||||||
FieldPanel('body'),
|
FieldPanel('body'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class SpecialPage(PersonalisablePageMixin, Page):
|
||||||
|
subtitle = models.CharField(max_length=255, blank=True, default='')
|
||||||
|
body = RichTextField(blank=True, default='')
|
||||||
|
special = RichTextField(blank=True, default='')
|
||||||
|
|
||||||
|
content_panels = Page.content_panels + [
|
||||||
|
FieldPanel('subtitle'),
|
||||||
|
FieldPanel('body'),
|
||||||
|
FieldPanel('special'),
|
||||||
|
]
|
||||||
|
@ -4,11 +4,11 @@ import datetime
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from tests.factories.page import HomePageFactory
|
||||||
from tests.factories.rule import (
|
from tests.factories.rule import (
|
||||||
DayRuleFactory, DeviceRuleFactory, ReferralRuleFactory, TimeRuleFactory)
|
DayRuleFactory, DeviceRuleFactory, ReferralRuleFactory, TimeRuleFactory)
|
||||||
from tests.factories.segment import SegmentFactory
|
from tests.factories.segment import SegmentFactory
|
||||||
from tests.factories.site import SiteFactory
|
from tests.factories.site import SiteFactory
|
||||||
from tests.factories.page import PageFactory
|
|
||||||
from wagtail_personalisation.models import Segment
|
from wagtail_personalisation.models import Segment
|
||||||
from wagtail_personalisation.rules import TimeRule
|
from wagtail_personalisation.rules import TimeRule
|
||||||
|
|
||||||
@ -98,5 +98,5 @@ def test_site_factory():
|
|||||||
def test_page_factory():
|
def test_page_factory():
|
||||||
site = SiteFactory()
|
site = SiteFactory()
|
||||||
assert site.root_page
|
assert site.root_page
|
||||||
page = PageFactory(parent=site.root_page)
|
page = HomePageFactory(parent=site.root_page)
|
||||||
assert page.get_parent() == site.root_page
|
assert page.get_parent() == site.root_page
|
||||||
|
@ -5,7 +5,6 @@ import datetime
|
|||||||
import pytest
|
import pytest
|
||||||
from freezegun import freeze_time
|
from freezegun import freeze_time
|
||||||
|
|
||||||
from tests.factories.page import PageFactory
|
|
||||||
from tests.factories.rule import (
|
from tests.factories.rule import (
|
||||||
DayRuleFactory, DeviceRuleFactory, QueryRuleFactory, ReferralRuleFactory,
|
DayRuleFactory, DeviceRuleFactory, QueryRuleFactory, ReferralRuleFactory,
|
||||||
TimeRuleFactory, VisitCountRuleFactory)
|
TimeRuleFactory, VisitCountRuleFactory)
|
||||||
|
Reference in New Issue
Block a user