added lots of factories on top of factories
This commit is contained in:
3
Makefile
3
Makefile
@ -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
|
||||
|
||||
|
1
setup.py
1
setup.py
@ -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(
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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'])
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -21,7 +21,7 @@ STATICFILES_FINDERS = (
|
||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
||||
)
|
||||
|
||||
USE_TZ = True
|
||||
USE_TZ = False
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
|
46
tests/unit/test_factories.py
Normal file
46
tests/unit/test_factories.py
Normal 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"
|
@ -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
|
||||
|
Reference in New Issue
Block a user