From fd4ddc4395a558aeccd3ee086fd4d246f399b0c2 Mon Sep 17 00:00:00 2001 From: Boris Besemer Date: Wed, 30 Nov 2016 17:20:42 +0100 Subject: [PATCH] adds segment middleware testing (simple) --- tests/factories/segment.py | 2 -- tests/sandbox/settings/base.py | 2 +- tests/sandbox/urls.py | 18 +++++++++++++++ tests/unit/test_factories.py | 23 ++++++++----------- tests/unit/test_middleware.py | 40 +++++++++++++++++++++++++++------- tests/unit/test_models.py | 6 ----- 6 files changed, 60 insertions(+), 31 deletions(-) create mode 100644 tests/sandbox/urls.py diff --git a/tests/factories/segment.py b/tests/factories/segment.py index 87dd5e1..1219b29 100644 --- a/tests/factories/segment.py +++ b/tests/factories/segment.py @@ -14,8 +14,6 @@ class SegmentFactory(factory.DjangoModelFactory): def create_rules(self, create, extracted, **kwargs): if not create: return - self.time_rule = TimeRuleFactory(segment=self) - self.referral_rule = ReferralRuleFactory(segment=self) class TimeRuleFactory(factory.DjangoModelFactory): diff --git a/tests/sandbox/settings/base.py b/tests/sandbox/settings/base.py index 8f3c50a..bd44f9c 100644 --- a/tests/sandbox/settings/base.py +++ b/tests/sandbox/settings/base.py @@ -13,7 +13,7 @@ DATABASES = { SECRET_KEY = 'not needed' -ROOT_URLCONF = 'tests.urls' +ROOT_URLCONF = 'tests.sandbox.urls' STATIC_URL = '/static/' diff --git a/tests/sandbox/urls.py b/tests/sandbox/urls.py new file mode 100644 index 0000000..ee6af0b --- /dev/null +++ b/tests/sandbox/urls.py @@ -0,0 +1,18 @@ +from __future__ import absolute_import, unicode_literals + +from django.conf import settings +from django.conf.urls import include, url +from django.contrib import admin +from wagtail.wagtailadmin import urls as wagtailadmin_urls +from wagtail.wagtailcore import urls as wagtail_urls +from wagtail.wagtaildocs import urls as wagtaildocs_urls + + +urlpatterns = [ + url(r'^django-admin/', include(admin.site.urls)), + + url(r'^admin/', include(wagtailadmin_urls)), + url(r'^documents/', include(wagtaildocs_urls)), + + url(r'', include(wagtail_urls)), +] diff --git a/tests/unit/test_factories.py b/tests/unit/test_factories.py index 1072647..b8d7fd4 100644 --- a/tests/unit/test_factories.py +++ b/tests/unit/test_factories.py @@ -14,33 +14,28 @@ def test_create_segment_factory(): assert factoried_segment.name == segment.name assert factoried_segment.status == segment.status - assert factoried_segment.time_rule.start_time == time_rule.start_time """TimeRuleFactory tests""" @pytest.mark.django_db def test_create_segment_with_time_rule(): - segment = SegmentFactory() + segment = SegmentFactory(name='TimeSegment') + time_rule = TimeRuleFactory(start_time=datetime.time(8, 0, 0), end_time=datetime.time(23, 0, 0), segment=segment) - assert segment.time_rule.start_time == datetime.time(8,0,0) - -@pytest.mark.django_db -def test_create_segment_with_new_time_rule(): - segment = SegmentFactory() - segment.time_rule = TimeRuleFactory(start_time=datetime.time(9,0,0), segment=segment) - - assert segment.time_rule.start_time == datetime.time(9,0,0) + assert time_rule.start_time == datetime.time(8,0,0) """ReferralRuleFactory tests""" @pytest.mark.django_db def test_create_segment_with_referral_rule(): - segment = SegmentFactory() + segment = SegmentFactory(name='Referral') + referral_rule = ReferralRuleFactory(regex_string='test.test', segment=segment) - assert segment.referral_rule.regex_string == "test.test" + assert referral_rule.regex_string == 'test.test' @pytest.mark.django_db def test_create_segment_with_new_referral_rule(): segment = SegmentFactory() - segment.referral_rule = ReferralRuleFactory(regex_string="test.notest", segment=segment) + segment.referral_rule = ReferralRuleFactory(regex_string='test.notest', segment=segment) + + assert segment.referral_rule.regex_string == 'test.notest' - assert segment.referral_rule.regex_string == "test.notest" diff --git a/tests/unit/test_middleware.py b/tests/unit/test_middleware.py index 54b632b..ce065b8 100644 --- a/tests/unit/test_middleware.py +++ b/tests/unit/test_middleware.py @@ -1,21 +1,45 @@ -import pytest +import datetime +import pytest +from freezegun import freeze_time + +from django.test.client import Client from tests.factories.site import SiteFactory -from tests.factories.segment import SegmentFactory +from tests.factories.segment import SegmentFactory, TimeRuleFactory, ReferralRuleFactory @pytest.mark.django_db class TestUserSegmenting(object): def setup(self): """ - Sets up a user segment and a site root to test segmenting + Sets up a site root to test segmenting """ - self.standard_segment = SegmentFactory(name='Standard') - self.time_only_segment = SegmentFactory(name='Time only') self.site = SiteFactory() + def test_no_segments(self, client): + request = client.get('/') - def test_standard_segment(self, rf): - request = rf.get('/') + assert client.session['segments'] == [] - + @freeze_time("10:00:00") + def test_time_segment(self, client): + time_only_segment = SegmentFactory(name='Time only') + time_rule = TimeRuleFactory( + start_time=datetime.time(8, 0, 0), + end_time=datetime.time(23, 0, 0), + segment=time_only_segment) + + request = client.get('/') + + assert client.session['segments'][0]['encoded_name'] == 'time-only' + + def test_referral_segment(self, client): + referral_segment = SegmentFactory(name='Referral') + referral_rule = ReferralRuleFactory( + regex_string="test.test", + segment=referral_segment + ) + + client.get('/', **{ 'HTTP_REFERER': 'test.test'}) + + assert client.session['segments'][0]['encoded_name'] == 'referral' diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py index ef6a318..449ec30 100644 --- a/tests/unit/test_models.py +++ b/tests/unit/test_models.py @@ -9,12 +9,6 @@ from personalisation import models from tests.factories.site import SiteFactory -"""Base Rule tests""" -def test_create_base_rule(): - base_rule = models.AbstractBaseRule() - - assert base_rule.test_user() is True - """Time Rule tests""" @freeze_time("10:00:00") def test_create_time_rule():