8

changes values and adds tests

This commit is contained in:
Boris Besemer
2016-12-06 11:05:44 +01:00
parent 3b9e1e74bd
commit 3ca81d8535
4 changed files with 93 additions and 11 deletions

View File

@@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.3 on 2016-12-06 10:05
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('personalisation', '0002_auto_20161205_1623'),
]
operations = [
migrations.RemoveField(
model_name='queryrule',
name='query_parameter',
),
migrations.RemoveField(
model_name='queryrule',
name='query_value',
),
migrations.AddField(
model_name='queryrule',
name='parameter',
field=models.SlugField(default='test', max_length=20, verbose_name='The query parameter to search for'),
preserve_default=False,
),
migrations.AddField(
model_name='queryrule',
name='value',
field=models.SlugField(default='test', max_length=20, verbose_name='The value of the parameter to match'),
preserve_default=False,
),
]

View File

@@ -1,5 +1,6 @@
from __future__ import absolute_import, unicode_literals from __future__ import absolute_import, unicode_literals
from datetime import datetime
import re import re
from django.db import models from django.db import models
@@ -156,20 +157,20 @@ class VisitCountRule(AbstractBaseRule):
@python_2_unicode_compatible @python_2_unicode_compatible
class QueryRule(AbstractBaseRule): class QueryRule(AbstractBaseRule):
"""Query rule to segment users based on matching queries""" """Query rule to segment users based on matching queries"""
query_parameter = models.SlugField(_("The query parameter to search for"), max_length=1) parameter = models.SlugField(_("The query parameter to search for"), max_length=20)
query_value = models.SlugField(_("The value of the parameter to match"), max_length=20, unique=True) value = models.SlugField(_("The value of the parameter to match"), max_length=20)
panels = [ panels = [
FieldPanel('query_parameter'), FieldPanel('parameter'),
FieldPanel('query_value'), FieldPanel('value'),
] ]
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(QueryRule, self).__init__(*args, **kwargs) super(QueryRule, self).__init__(*args, **kwargs)
def test_user(self, request): def test_user(self, request):
parameter = self.query_parameter parameter = self.parameter
value = self.query_value value = self.value
req_value = request.GET.get(parameter, '') req_value = request.GET.get(parameter, '')
if req_value == value: if req_value == value:
@@ -177,7 +178,7 @@ class QueryRule(AbstractBaseRule):
return False return False
def __str__(self): def __str__(self):
return '?{}={}'.format(self.query_parameter, self.query_value) return '?{}={}'.format(self.parameter, self.value)
@python_2_unicode_compatible @python_2_unicode_compatible

View File

@@ -32,3 +32,9 @@ class VisitCountRuleFactory(factory.DjangoModelFactory):
class Meta: class Meta:
model = models.VisitCountRule model = models.VisitCountRule
class QueryRuleFactory(factory.DjangoModelFactory):
class Meta:
model = models.QueryRule

View File

@@ -6,7 +6,8 @@ from freezegun import freeze_time
from wagtail.wagtailcore.models import Page from wagtail.wagtailcore.models import Page
from tests.factories.segment import ( from tests.factories.segment import (
ReferralRuleFactory, SegmentFactory, TimeRuleFactory, VisitCountRuleFactory) ReferralRuleFactory, SegmentFactory,
TimeRuleFactory, VisitCountRuleFactory, QueryRuleFactory)
from tests.factories.site import SiteFactory from tests.factories.site import SiteFactory
@@ -132,10 +133,49 @@ class TestUserSegmenting(object):
client.get("/root") client.get("/root")
import pdb # assert any(item['encoded_name'] == 'visit-count' for item in client.session['segments'])
pdb.set_trace()
assert any(item['encoded_name'] == 'visit-count' for item in client.session['segments']) def test_query_rule(self, client):
segment = SegmentFactory(name='Query')
query_rule = QueryRuleFactory(
parameter="query",
value="value",
segment=segment,
)
client.get('/?query=value')
assert any(item['encoded_name'] == 'query' for item in client.session['segments'])
def test_only_one_query_rule(self, client):
segment = SegmentFactory(name='Query')
query_rule = QueryRuleFactory(
parameter="query",
value="value",
segment=segment
)
client.get('/?test=test&query=value')
assert any(item['encoded_name'] == 'query' for item in client.session['segments'])
def test_multiple_queries(self, client):
segment = SegmentFactory(name='Multiple queries')
first_query_rule = QueryRuleFactory(
parameter="test",
value="test",
segment=segment
)
second_query_rule = QueryRuleFactory(
parameter="query",
value="value",
segment=segment,
)
client.get('/?test=test&query=value')
assert any(item['encoded_name'] == 'multiple-queries' for item in client.session['segments'])
@pytest.mark.django_db @pytest.mark.django_db