7

support multiple uses of the mixin class (#140)

This commit is contained in:
Paul J Stevens
2017-05-31 16:50:56 +02:00
committed by Rob Moorman
parent 4deaaa985f
commit 99d2e4a347
8 changed files with 74 additions and 13 deletions

View File

@ -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)

View File

@ -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

View File

@ -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:

View File

@ -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)

View 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'),
),
]

View File

@ -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'),
]

View File

@ -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

View File

@ -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)