adds checking for admin urls 👌
This commit is contained in:
@ -16,10 +16,7 @@ class SegmentMiddleware(object):
|
||||
self.get_response = get_response
|
||||
|
||||
def __call__(self, request):
|
||||
django_admin = reverse('admin:index')
|
||||
|
||||
if request.path.startswith('/admin/') or request.path.startswith('/django-admin/'):
|
||||
return self.get_response(request)
|
||||
reverse_urls = [reverse('admin:index'), reverse('wagtailadmin_home')]
|
||||
|
||||
if 'visit_count' not in request.session:
|
||||
request.session['visit_count'] = []
|
||||
@ -27,6 +24,9 @@ class SegmentMiddleware(object):
|
||||
if 'segments' not in request.session:
|
||||
request.session['segments'] = []
|
||||
|
||||
if any(request.path.startswith(item) for item in reverse_urls):
|
||||
return self.get_response(request)
|
||||
|
||||
segments = Segment.objects.all().filter(status='enabled')
|
||||
|
||||
for segment in segments:
|
||||
|
@ -101,7 +101,7 @@ class VisitCountRule(AbstractBaseRule):
|
||||
('less_than', _("Less than")),
|
||||
('equal_to', _("Equal to")),
|
||||
)
|
||||
operator = models.CharField(max_length=20, choices=OPERATOR_CHOICES, default="ht")
|
||||
operator = models.CharField(max_length=20, choices=OPERATOR_CHOICES, default="more_than")
|
||||
count = models.PositiveSmallIntegerField(default=0, null=True)
|
||||
counted_page = models.ForeignKey(
|
||||
'wagtailcore.Page',
|
||||
|
@ -93,10 +93,12 @@ def serve_variation(page, request, serve_args, serve_kwargs):
|
||||
def _check_for_variations(segments, page):
|
||||
for segment in segments:
|
||||
page_class = page.__class__
|
||||
if not any(item == PersonalisablePage for item in page_class.__bases__):
|
||||
page_class = PersonalisablePage
|
||||
|
||||
variation = page_class.objects.filter(canonical_page=page, segment=segment)
|
||||
|
||||
if variation:
|
||||
|
||||
return variation
|
||||
|
||||
return None
|
||||
|
@ -12,11 +12,6 @@ class SegmentFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = models.Segment
|
||||
|
||||
@factory.post_generation
|
||||
def create_rules(self, create, extracted, **kwargs):
|
||||
if not create:
|
||||
return
|
||||
|
||||
|
||||
class TimeRuleFactory(factory.DjangoModelFactory):
|
||||
start_time = datetime.time(8,0,0)
|
||||
@ -30,3 +25,10 @@ class ReferralRuleFactory(factory.DjangoModelFactory):
|
||||
|
||||
class Meta:
|
||||
model = models.ReferralRule
|
||||
|
||||
class VisitCountRuleFactory(factory.DjangoModelFactory):
|
||||
operator = "more_than"
|
||||
count = 0
|
||||
|
||||
class Meta:
|
||||
model = models.VisitCountRule
|
||||
|
@ -3,9 +3,10 @@ import datetime
|
||||
import pytest
|
||||
from django.test.client import Client
|
||||
from freezegun import freeze_time
|
||||
from wagtail.wagtailcore.models import Page
|
||||
|
||||
from tests.factories.segment import (
|
||||
ReferralRuleFactory, SegmentFactory, TimeRuleFactory)
|
||||
ReferralRuleFactory, SegmentFactory, TimeRuleFactory, VisitCountRuleFactory)
|
||||
from tests.factories.site import SiteFactory
|
||||
|
||||
|
||||
@ -121,6 +122,21 @@ class TestUserSegmenting(object):
|
||||
second_segment_referral_rule = ReferralRuleFactory
|
||||
|
||||
|
||||
def test_visit_count_rule(self, client):
|
||||
segment = SegmentFactory(name='Visit Count')
|
||||
|
||||
visit_count_rule = VisitCountRuleFactory(
|
||||
counted_page=Page.objects.filter(slug="root").first(),
|
||||
segment=segment
|
||||
)
|
||||
|
||||
client.get("/root")
|
||||
|
||||
import pdb
|
||||
pdb.set_trace()
|
||||
|
||||
assert any(item['encoded_name'] == 'visit-count' for item in client.session['segments'])
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
class TestUserVisitCount(object):
|
||||
@ -141,3 +157,13 @@ class TestUserVisitCount(object):
|
||||
assert not any(item['path'] == '/doesntexist' for item in client.session['visit_count'])
|
||||
|
||||
|
||||
def test_ignores_admin_visits(self, client):
|
||||
client.get('/admin/')
|
||||
|
||||
assert not any(item['path'] == '/admin/' for item in client.session['visit_count'])
|
||||
|
||||
client.get('/django-admin/')
|
||||
|
||||
assert not any(item['path'] == '/django-admin/' for item in client.session['visit_count'])
|
||||
|
||||
assert client.session['visit_count'] == []
|
||||
|
Reference in New Issue
Block a user