changes values and adds tests
This commit is contained in:
35
src/personalisation/migrations/0003_auto_20161206_1005.py
Normal file
35
src/personalisation/migrations/0003_auto_20161206_1005.py
Normal 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,
|
||||
),
|
||||
]
|
@@ -1,5 +1,6 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from datetime import datetime
|
||||
import re
|
||||
|
||||
from django.db import models
|
||||
@@ -156,20 +157,20 @@ class VisitCountRule(AbstractBaseRule):
|
||||
@python_2_unicode_compatible
|
||||
class QueryRule(AbstractBaseRule):
|
||||
"""Query rule to segment users based on matching queries"""
|
||||
query_parameter = models.SlugField(_("The query parameter to search for"), max_length=1)
|
||||
query_value = models.SlugField(_("The value of the parameter to match"), max_length=20, unique=True)
|
||||
parameter = models.SlugField(_("The query parameter to search for"), max_length=20)
|
||||
value = models.SlugField(_("The value of the parameter to match"), max_length=20)
|
||||
|
||||
panels = [
|
||||
FieldPanel('query_parameter'),
|
||||
FieldPanel('query_value'),
|
||||
FieldPanel('parameter'),
|
||||
FieldPanel('value'),
|
||||
]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(QueryRule, self).__init__(*args, **kwargs)
|
||||
|
||||
def test_user(self, request):
|
||||
parameter = self.query_parameter
|
||||
value = self.query_value
|
||||
parameter = self.parameter
|
||||
value = self.value
|
||||
|
||||
req_value = request.GET.get(parameter, '')
|
||||
if req_value == value:
|
||||
@@ -177,7 +178,7 @@ class QueryRule(AbstractBaseRule):
|
||||
return False
|
||||
|
||||
def __str__(self):
|
||||
return '?{}={}'.format(self.query_parameter, self.query_value)
|
||||
return '?{}={}'.format(self.parameter, self.value)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
|
@@ -32,3 +32,9 @@ class VisitCountRuleFactory(factory.DjangoModelFactory):
|
||||
|
||||
class Meta:
|
||||
model = models.VisitCountRule
|
||||
|
||||
|
||||
class QueryRuleFactory(factory.DjangoModelFactory):
|
||||
|
||||
class Meta:
|
||||
model = models.QueryRule
|
||||
|
@@ -6,7 +6,8 @@ from freezegun import freeze_time
|
||||
from wagtail.wagtailcore.models import Page
|
||||
|
||||
from tests.factories.segment import (
|
||||
ReferralRuleFactory, SegmentFactory, TimeRuleFactory, VisitCountRuleFactory)
|
||||
ReferralRuleFactory, SegmentFactory,
|
||||
TimeRuleFactory, VisitCountRuleFactory, QueryRuleFactory)
|
||||
from tests.factories.site import SiteFactory
|
||||
|
||||
|
||||
@@ -132,10 +133,49 @@ class TestUserSegmenting(object):
|
||||
|
||||
client.get("/root")
|
||||
|
||||
import pdb
|
||||
pdb.set_trace()
|
||||
# assert any(item['encoded_name'] == 'visit-count' for item in client.session['segments'])
|
||||
|
||||
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
|
||||
|
Reference in New Issue
Block a user