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
)
segment = models.ForeignKey(
Segment, related_name='segments', on_delete=models.PROTECT,
Segment, related_name='+', on_delete=models.PROTECT,
blank=True, null=True
)
is_segmented = models.BooleanField(default=False)

View File

@ -4,12 +4,20 @@ import factory
from django.utils.text import slugify
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'
slug = factory.LazyAttribute(lambda obj: slugify(obj.title))
class Meta:
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
from wagtail.wagtailcore.models import Site
from tests.factories.page import PageFactory
from tests.factories.page import HomePageFactory
class SiteFactory(factory.DjangoModelFactory):
hostname = 'localhost'
port = factory.Sequence(lambda n: 81 + n)
site_name = 'Test site'
root_page = factory.SubFactory(PageFactory, parent=None)
root_page = factory.SubFactory(HomePageFactory, parent=None)
is_default_site = False
class Meta:

View File

@ -1,10 +1,10 @@
import pytest
from django.contrib.auth.models import AnonymousUser
from django.contrib.messages.storage.fallback import FallbackStorage
from django.contrib.sessions.backends.db import SessionStore
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.site import SiteFactory
@ -12,14 +12,16 @@ from tests.factories.site import SiteFactory
@pytest.fixture(scope='function')
def site():
site = SiteFactory(is_default_site=True)
PageFactory(parent=site.root_page, slug='page-1')
PageFactory(parent=site.root_page, slug='page-2')
page1 = HomePageFactory(parent=site.root_page, slug='page-1')
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
@pytest.fixture
def segmented_page(site):
page = PageFactory(parent=site.root_page)
page = HomePageFactory(parent=site.root_page)
segment = SegmentFactory()
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('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
from tests.factories.page import HomePageFactory
from tests.factories.rule import (
DayRuleFactory, DeviceRuleFactory, ReferralRuleFactory, TimeRuleFactory)
from tests.factories.segment import SegmentFactory
from tests.factories.site import SiteFactory
from tests.factories.page import PageFactory
from wagtail_personalisation.models import Segment
from wagtail_personalisation.rules import TimeRule
@ -98,5 +98,5 @@ def test_site_factory():
def test_page_factory():
site = SiteFactory()
assert site.root_page
page = PageFactory(parent=site.root_page)
page = HomePageFactory(parent=site.root_page)
assert page.get_parent() == site.root_page

View File

@ -5,7 +5,6 @@ import datetime
import pytest
from freezegun import freeze_time
from tests.factories.page import PageFactory
from tests.factories.rule import (
DayRuleFactory, DeviceRuleFactory, QueryRuleFactory, ReferralRuleFactory,
TimeRuleFactory, VisitCountRuleFactory)