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 __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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user