7

added lots of factories on top of factories

This commit is contained in:
Boris Besemer
2016-11-30 14:38:14 +01:00
parent 7306863fd8
commit 2936223203
9 changed files with 127 additions and 11 deletions

View File

@ -17,6 +17,9 @@ develop: clean requirements
test:
py.test --nomigrations --reuse-db tests/
retest:
py.test --nomigrations --reuse-db tests/ -vvv
coverage:
py.test --cov=personalisation --cov-report=term-missing --cov-report=html

View File

@ -12,6 +12,7 @@ tests_require = [
'pytest-django==3.0.0',
'pytest-sugar==0.7.1',
'freezegun==0.3.8',
'factory_boy==2.7.0',
]
setup(

View File

@ -1,6 +1,9 @@
import pytest
from django.apps import apps
from wagtail.wagtailcore.models import Page, Site
from tests.sandbox.pages.models import HomePage
@pytest.fixture(scope='session')
def django_db_setup(django_db_setup, django_db_blocker):
@ -8,3 +11,4 @@ def django_db_setup(django_db_setup, django_db_blocker):
# Remove some initial data that is brought by the sandbox module
Site.objects.all().delete()
Page.objects.all().exclude(depth=1).delete()

View File

@ -14,3 +14,34 @@ class PersonalisablePageFactory(factory.DjangoModelFactory):
if not obj.title:
obj.title = "Page-Test"
return obj
class HomePageFactory(factory.DjangoModelFactory):
class Meta:
model = HomePage
@classmethod
def build(cls, *args, **kwargs):
obj = super(HomePageFactory, cls)._build(*args, **kwargs)
for part in ('subtitle', 'body'):
if not getattr(obj, part):
setattr(obj, part, "{}".format(part))
return obj
class SiteRootFactory(factory.DjangoModelFactory):
title = 'site-root'
depth = 2
class Meta:
model = Page
@classmethod
def _create(cls, *args, **kwargs):
try:
root = Page.objects.get(depth=0)
except Page.DoesNotExist:
root = Page.add_root(title='root')
return root.add_child(title=kwargs['title'])

View File

@ -1,19 +1,32 @@
import factory
from django.db import models
from personalisation.models import Segment, TimeRule
import datetime
import factory
from personalisation import models
class SegmentFactory(factory.DjangoModelFactory):
name = 'TestSegment'
status = 'enabled'
time_rule = factory.RelatedFactory(TimeRuleFactory, '%(app_label)s_%(class)s_related', action=TimeRule.ACTION_CREATE)
class Meta:
model = Segment
model = models.Segment
@factory.post_generation
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):
class Meta:
model = TimeRule
start_time = datetime.time(8,0,0)
end_time = datetime.time(23,0,0)
class Meta:
model = models.TimeRule
class ReferralRuleFactory(factory.DjangoModelFactory):
regex_string = "test.test"
class Meta:
model = models.ReferralRule

View File

@ -1,11 +1,14 @@
import factory
from wagtail.wagtailcore.models import Site
from tests.factories.page import SiteRootFactory
class SiteFactory(factory.DjangoModelFactory):
hostname = 'localhost'
port = 8000
site_name = 'Testing Site'
root_page = factory.SubFactory(SiteRootFactory)
is_default_site = True
class Meta
class Meta:
model = Site

View File

@ -21,7 +21,7 @@ STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
USE_TZ = True
USE_TZ = False
TEMPLATES = [
{

View File

@ -0,0 +1,46 @@
import datetime
import pytest
from personalisation.models import Segment, TimeRule
from tests.factories.segment import SegmentFactory, TimeRuleFactory, ReferralRuleFactory
"""Factory tests"""
@pytest.mark.django_db
def test_create_segment_factory():
factoried_segment = SegmentFactory()
segment = Segment(name='TestSegment', status='enabled')
time_rule = TimeRule(start_time=datetime.time(8,0,0), end_time=datetime.time(23,0,0), segment=segment)
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()
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)
"""ReferralRuleFactory tests"""
@pytest.mark.django_db
def test_create_segment_with_referral_rule():
segment = SegmentFactory()
assert segment.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)
assert segment.referral_rule.regex_string == "test.notest"

View File

@ -2,10 +2,12 @@ import datetime
import pytest
from freezegun import freeze_time
from django.http import HttpRequest
from wagtail.wagtailcore.models import Site
from personalisation import models
from tests.factories.site import SiteFactory
def
"""Base Rule tests"""
def test_create_base_rule():
@ -43,3 +45,16 @@ def test_time_rule_reverse_next_day():
def test_visit_count_rule():
visit_count_rule = models.VisitCountRule()
"""Test test"""
@pytest.mark.django_db
def test_test(rf):
site = SiteFactory()
request = HttpRequest()
request.path = '/'
request.META['HTTP_HOST'] = 'localhost'
request.META['SERVER_PORT'] = 8000
assert Site.find_for_request(request) == site