Test count_matching_users method
This commit is contained in:
@@ -8,7 +8,8 @@ from django.forms.models import model_to_dict
|
|||||||
from tests.factories.segment import SegmentFactory
|
from tests.factories.segment import SegmentFactory
|
||||||
from wagtail_personalisation.forms import SegmentAdminForm
|
from wagtail_personalisation.forms import SegmentAdminForm
|
||||||
from wagtail_personalisation.models import Segment
|
from wagtail_personalisation.models import Segment
|
||||||
from wagtail_personalisation.rules import TimeRule, VisitCountRule
|
from wagtail_personalisation.rules import (AbstractBaseRule, TimeRule,
|
||||||
|
VisitCountRule)
|
||||||
|
|
||||||
|
|
||||||
def form_with_data(segment, *rules):
|
def form_with_data(segment, *rules):
|
||||||
@@ -246,3 +247,113 @@ def test_dynamic_segment_with_non_static_rules_have_a_count():
|
|||||||
)
|
)
|
||||||
form = form_with_data(segment, rule)
|
form = form_with_data(segment, rule)
|
||||||
assert form.is_valid(), form.errors
|
assert form.is_valid(), form.errors
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_count_users_matching_static_rules(site, client, django_user_model):
|
||||||
|
class TestStaticRule(AbstractBaseRule):
|
||||||
|
static = True
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
app_label = 'wagtail_personalisation'
|
||||||
|
|
||||||
|
def test_user(self, request, user):
|
||||||
|
return True
|
||||||
|
|
||||||
|
django_user_model.objects.create(username='first')
|
||||||
|
django_user_model.objects.create(username='second')
|
||||||
|
|
||||||
|
segment = SegmentFactory.build(type=Segment.TYPE_STATIC)
|
||||||
|
rule = TestStaticRule()
|
||||||
|
form = form_with_data(segment, rule)
|
||||||
|
|
||||||
|
assert form.count_matching_users([rule], True) is 2
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_count_matching_users_only_counts_static_rules(site, client, django_user_model):
|
||||||
|
class TestStaticRule(AbstractBaseRule):
|
||||||
|
class Meta:
|
||||||
|
app_label = 'wagtail_personalisation'
|
||||||
|
|
||||||
|
def test_user(self, request, user):
|
||||||
|
return True
|
||||||
|
|
||||||
|
django_user_model.objects.create(username='first')
|
||||||
|
django_user_model.objects.create(username='second')
|
||||||
|
|
||||||
|
segment = SegmentFactory.build(type=Segment.TYPE_STATIC)
|
||||||
|
rule = TestStaticRule()
|
||||||
|
form = form_with_data(segment, rule)
|
||||||
|
|
||||||
|
assert form.count_matching_users([rule], True) is 0
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_count_matching_users_handles_match_any(site, client, django_user_model):
|
||||||
|
class TestStaticRuleFirst(AbstractBaseRule):
|
||||||
|
static = True
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
app_label = 'wagtail_personalisation'
|
||||||
|
|
||||||
|
def test_user(self, request, user):
|
||||||
|
if user.username == 'first':
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
class TestStaticRuleSecond(AbstractBaseRule):
|
||||||
|
static = True
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
app_label = 'wagtail_personalisation'
|
||||||
|
|
||||||
|
def test_user(self, request, user):
|
||||||
|
if user.username == 'second':
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
django_user_model.objects.create(username='first')
|
||||||
|
django_user_model.objects.create(username='second')
|
||||||
|
|
||||||
|
segment = SegmentFactory.build(type=Segment.TYPE_STATIC)
|
||||||
|
first_rule = TestStaticRuleFirst()
|
||||||
|
second_rule = TestStaticRuleSecond()
|
||||||
|
form = form_with_data(segment, first_rule, second_rule)
|
||||||
|
|
||||||
|
assert form.count_matching_users([first_rule, second_rule], True) is 2
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_count_matching_users_handles_match_all(site, client, django_user_model):
|
||||||
|
class TestStaticRuleFirst(AbstractBaseRule):
|
||||||
|
static = True
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
app_label = 'wagtail_personalisation'
|
||||||
|
|
||||||
|
def test_user(self, request, user):
|
||||||
|
if user.username == 'first':
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
class TestStaticRuleContainsS(AbstractBaseRule):
|
||||||
|
static = True
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
app_label = 'wagtail_personalisation'
|
||||||
|
|
||||||
|
def test_user(self, request, user):
|
||||||
|
if 's' in user.username:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
django_user_model.objects.create(username='first')
|
||||||
|
django_user_model.objects.create(username='second')
|
||||||
|
|
||||||
|
segment = SegmentFactory.build(type=Segment.TYPE_STATIC)
|
||||||
|
first_rule = TestStaticRuleFirst()
|
||||||
|
s_rule = TestStaticRuleContainsS()
|
||||||
|
form = form_with_data(segment, first_rule, s_rule)
|
||||||
|
|
||||||
|
assert form.count_matching_users([first_rule, s_rule], False) is 1
|
||||||
|
Reference in New Issue
Block a user