diff --git a/src/wagtail_personalisation/models.py b/src/wagtail_personalisation/models.py index b77d643..8ec9199 100644 --- a/src/wagtail_personalisation/models.py +++ b/src/wagtail_personalisation/models.py @@ -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) diff --git a/tests/factories/page.py b/tests/factories/page.py index 78a2249..1e0da39 100644 --- a/tests/factories/page.py +++ b/tests/factories/page.py @@ -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 diff --git a/tests/factories/site.py b/tests/factories/site.py index 23b63f8..fa7eb94 100644 --- a/tests/factories/site.py +++ b/tests/factories/site.py @@ -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: diff --git a/tests/fixtures.py b/tests/fixtures.py index 0e3e437..2671e20 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -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) diff --git a/tests/sandbox/pages/migrations/0002_auto_20170531_0915.py b/tests/sandbox/pages/migrations/0002_auto_20170531_0915.py new file mode 100644 index 0000000..8fefbda --- /dev/null +++ b/tests/sandbox/pages/migrations/0002_auto_20170531_0915.py @@ -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'), + ), + ] diff --git a/tests/sandbox/pages/models.py b/tests/sandbox/pages/models.py index ef1dcd7..612d730 100644 --- a/tests/sandbox/pages/models.py +++ b/tests/sandbox/pages/models.py @@ -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'), + ] diff --git a/tests/unit/test_factories.py b/tests/unit/test_factories.py index 5aebdd2..ba8d5ea 100644 --- a/tests/unit/test_factories.py +++ b/tests/unit/test_factories.py @@ -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 diff --git a/tests/unit/test_middleware.py b/tests/unit/test_middleware.py index 2f636fb..7a7782f 100644 --- a/tests/unit/test_middleware.py +++ b/tests/unit/test_middleware.py @@ -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)