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:
|
test:
|
||||||
py.test --nomigrations --reuse-db tests/
|
py.test --nomigrations --reuse-db tests/
|
||||||
|
|
||||||
|
retest:
|
||||||
|
py.test --nomigrations --reuse-db tests/ -vvv
|
||||||
|
|
||||||
coverage:
|
coverage:
|
||||||
py.test --cov=personalisation --cov-report=term-missing --cov-report=html
|
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-django==3.0.0',
|
||||||
'pytest-sugar==0.7.1',
|
'pytest-sugar==0.7.1',
|
||||||
'freezegun==0.3.8',
|
'freezegun==0.3.8',
|
||||||
|
'factory_boy==2.7.0',
|
||||||
]
|
]
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
import pytest
|
import pytest
|
||||||
|
from django.apps import apps
|
||||||
from wagtail.wagtailcore.models import Page, Site
|
from wagtail.wagtailcore.models import Page, Site
|
||||||
|
|
||||||
|
from tests.sandbox.pages.models import HomePage
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='session')
|
@pytest.fixture(scope='session')
|
||||||
def django_db_setup(django_db_setup, django_db_blocker):
|
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
|
# Remove some initial data that is brought by the sandbox module
|
||||||
Site.objects.all().delete()
|
Site.objects.all().delete()
|
||||||
Page.objects.all().exclude(depth=1).delete()
|
Page.objects.all().exclude(depth=1).delete()
|
||||||
|
|
||||||
|
@ -14,3 +14,34 @@ class PersonalisablePageFactory(factory.DjangoModelFactory):
|
|||||||
if not obj.title:
|
if not obj.title:
|
||||||
obj.title = "Page-Test"
|
obj.title = "Page-Test"
|
||||||
return obj
|
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
|
import datetime
|
||||||
from django.db import models
|
|
||||||
from personalisation.models import Segment, TimeRule
|
|
||||||
|
|
||||||
|
import factory
|
||||||
|
from personalisation import models
|
||||||
|
|
||||||
class SegmentFactory(factory.DjangoModelFactory):
|
class SegmentFactory(factory.DjangoModelFactory):
|
||||||
name = 'TestSegment'
|
name = 'TestSegment'
|
||||||
status = 'enabled'
|
status = 'enabled'
|
||||||
|
|
||||||
time_rule = factory.RelatedFactory(TimeRuleFactory, '%(app_label)s_%(class)s_related', action=TimeRule.ACTION_CREATE)
|
|
||||||
|
|
||||||
class Meta:
|
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 TimeRuleFactory(factory.DjangoModelFactory):
|
||||||
class Meta:
|
start_time = datetime.time(8,0,0)
|
||||||
model = TimeRule
|
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
|
import factory
|
||||||
from wagtail.wagtailcore.models import Site
|
from wagtail.wagtailcore.models import Site
|
||||||
|
|
||||||
|
from tests.factories.page import SiteRootFactory
|
||||||
|
|
||||||
class SiteFactory(factory.DjangoModelFactory):
|
class SiteFactory(factory.DjangoModelFactory):
|
||||||
hostname = 'localhost'
|
hostname = 'localhost'
|
||||||
port = 8000
|
port = 8000
|
||||||
site_name = 'Testing Site'
|
site_name = 'Testing Site'
|
||||||
|
root_page = factory.SubFactory(SiteRootFactory)
|
||||||
is_default_site = True
|
is_default_site = True
|
||||||
|
|
||||||
class Meta
|
class Meta:
|
||||||
model = Site
|
model = Site
|
||||||
|
@ -21,7 +21,7 @@ STATICFILES_FINDERS = (
|
|||||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
||||||
)
|
)
|
||||||
|
|
||||||
USE_TZ = True
|
USE_TZ = False
|
||||||
|
|
||||||
TEMPLATES = [
|
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
|
import pytest
|
||||||
from freezegun import freeze_time
|
from freezegun import freeze_time
|
||||||
|
from django.http import HttpRequest
|
||||||
|
from wagtail.wagtailcore.models import Site
|
||||||
|
|
||||||
from personalisation import models
|
from personalisation import models
|
||||||
|
from tests.factories.site import SiteFactory
|
||||||
|
|
||||||
def
|
|
||||||
|
|
||||||
"""Base Rule tests"""
|
"""Base Rule tests"""
|
||||||
def test_create_base_rule():
|
def test_create_base_rule():
|
||||||
@ -43,3 +45,16 @@ def test_time_rule_reverse_next_day():
|
|||||||
def test_visit_count_rule():
|
def test_visit_count_rule():
|
||||||
visit_count_rule = models.VisitCountRule()
|
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