7
This repository has been archived on 2023-05-07. You can view files and clone it, but cannot push or open issues or pull requests.
Files
cavemanon-wagtail-personali…/tests/unit/test_middleware.py
2016-12-05 08:49:42 +01:00

144 lines
4.1 KiB
Python

import datetime
import pytest
from django.test.client import Client
from freezegun import freeze_time
from tests.factories.segment import (
ReferralRuleFactory, SegmentFactory, TimeRuleFactory)
from tests.factories.site import SiteFactory
@pytest.mark.django_db
class TestUserSegmenting(object):
def setup(self):
"""
Sets up a site root to test segmenting
"""
self.site = SiteFactory()
def test_no_segments(self, client):
request = client.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'
@freeze_time("10:00:00")
def test_time_and_referral_segment(self, client):
segment = SegmentFactory(name='Both')
time_rule = TimeRuleFactory(
start_time=datetime.time(8, 0, 0),
end_time=datetime.time(23, 0, 0),
segment=segment
)
referral_rule = ReferralRuleFactory(
regex_string="test.test",
segment=segment
)
client.get('/', **{ 'HTTP_REFERER': 'test.test'})
assert client.session['segments'][0]['encoded_name'] == 'both'
@freeze_time("7:00:00")
def test_no_time_but_referral_segment(self, client):
segment = SegmentFactory(name='Not both')
time_rule = TimeRuleFactory(
start_time=datetime.time(8, 0, 0),
end_time=datetime.time(23, 0, 0),
segment=segment
)
referral_rule = ReferralRuleFactory(
regex_string="test.test",
segment=segment
)
client.get('/', **{ 'HTTP_REFERER': 'test.test'})
assert len(client.session['segments']) == 0
@freeze_time("9:00:00")
def test_time_but_no_referral_segment(self, client):
segment = SegmentFactory(name='Not both')
time_rule = TimeRuleFactory(
start_time=datetime.time(8, 0, 0),
end_time=datetime.time(23, 0, 0),
segment=segment
)
referral_rule = ReferralRuleFactory(
regex_string="test.test",
segment=segment
)
client.get('/')
assert len(client.session['segments']) == 0
@freeze_time("9:00:00")
def test_multiple_segments_exist(self, client):
first_segment = SegmentFactory(name='First')
second_segment = SegmentFactory(name='Second')
first_segment_time_rule = TimeRuleFactory(
start_time=datetime.time(8, 0, 0),
end_time=datetime.time(23, 0, 0),
segment=first_segment
)
first_segment_referral_rule = ReferralRuleFactory(
regex_string="test.test",
segment=first_segment
)
second_segment_time_rule = TimeRuleFactory(
start_time=datetime.time(8, 0, 0),
end_time=datetime.time(23, 0, 0),
segment=second_segment
)
second_segment_referral_rule = ReferralRuleFactory
@pytest.mark.django_db
class TestUserVisitCount(object):
def setup(self):
self.site = SiteFactory()
# TODO: Set up a bunch of pages for testing the visit count
def test_visit_count(self, client):
client.get('/')
assert any(item['path'] == '/' for item in client.session['visit_count'])
def test_no_visit_count(self, client):
client.get('/')
assert not any(item['path'] == '/doesntexist' for item in client.session['visit_count'])