Skip to content
This repository has been archived by the owner on Feb 13, 2022. It is now read-only.

Commit

Permalink
Test if user matches static segmentation rules even without an active…
Browse files Browse the repository at this point in the history
… request
  • Loading branch information
Kaitlyn Crawford committed Jan 24, 2018
1 parent a6eed2c commit 92300b1
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 13 deletions.
44 changes: 31 additions & 13 deletions molo/surveys/rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,14 +170,18 @@ def clean(self):
'expected_response': error
})

def test_user(self, request):
# Must be logged-in to use this rule
if not request.user.is_authenticated():
def test_user(self, request, user=None):
if request:
# When testing a request they must be logged-in to use this rule
if not request.user.is_authenticated():
return False
user = request.user

if not user:
return False

try:
survey_submission = self.get_survey_submission_of_user(
request.user)
survey_submission = self.get_survey_submission_of_user(user)
except self.survey_submission_model.DoesNotExist:
# No survey found so return false
return False
Expand Down Expand Up @@ -254,14 +258,18 @@ class SurveyResponseRule(AbstractBaseRule):
class Meta:
verbose_name = _('Survey response rule')

def test_user(self, request):
if not request.user.is_authenticated():
def test_user(self, request, user=None):
if request:
if not request.user.is_authenticated():
return False
user = request.user
if not user:
return False

submission_class = self.survey.get_submission_class()

return submission_class.objects.filter(
user=request.user,
user=user,
page=self.survey,
).exists()

Expand Down Expand Up @@ -293,13 +301,17 @@ def description(self):
'value': _('Member of: "%s"') % self.group
}

def test_user(self, request):
# Ignore not-logged in users
if not request.user.is_authenticated():
def test_user(self, request, user=None):
if request:
# Ignore not-logged in users when testing requests
if not request.user.is_authenticated():
return False
user = request.user
if not user:
return False

# Check whether user is part of a group
return request.user.segment_groups.filter(id=self.group_id).exists()
return user.segment_groups.filter(id=self.group_id).exists()


class ArticleTagRule(AbstractBaseRule):
Expand Down Expand Up @@ -388,7 +400,13 @@ def clean(self):
}
)

def test_user(self, request):
def test_user(self, request, user=None):
if user:
# This rule currently does not support testing a user directly
# TODO: Make this test a user directly when the rule uses
# historical data
return False

from wagtail_personalisation.adapters import get_segment_adapter
operator = self.OPERATORS[self.operator]
adapter = get_segment_adapter(request)
Expand Down
32 changes: 32 additions & 0 deletions molo/surveys/tests/test_rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,20 @@ def test_not_logged_in_user_fails(self):
self.request.user = AnonymousUser()
self.assertFalse(rule.test_user(self.request))

def test_test_user_without_request(self):
rule = SurveySubmissionDataRule(
survey=self.survey, operator=SurveySubmissionDataRule.CONTAINS,
expected_response='er ra',
field_name=self.singleline_text.clean_name)
self.assertTrue(rule.test_user(None, self.request.user))

def test_test_user_without_user_or_request(self):
rule = SurveySubmissionDataRule(
survey=self.survey, operator=SurveySubmissionDataRule.CONTAINS,
expected_response='er ra',
field_name=self.singleline_text.clean_name)
self.assertFalse(rule.test_user(None))


class TestSurveyResponseRule(TestCase, MoloTestCaseMixin):
def setUp(self):
Expand Down Expand Up @@ -257,6 +271,16 @@ def test_other_user_submitted_fails(self):
self.request.user = new_user
self.assertTrue(rule.test_user(self.request))

def test_test_user_without_request(self):
self.submit_survey(self.survey, self.user)
rule = SurveyResponseRule(survey=self.survey)
self.assertTrue(rule.test_user(None, self.request.user))

def test_test_user_without_user_or_request(self):
self.submit_survey(self.survey, self.user)
rule = SurveyResponseRule(survey=self.survey)
self.assertFalse(rule.test_user(None))


class TestGroupMembershipRuleSegmentation(TestCase, MoloTestCaseMixin):
def setUp(self):
Expand Down Expand Up @@ -293,6 +317,14 @@ def test_user_membership_rule_on_not_logged_in_user(self):

self.assertFalse(rule.test_user(self.request))

def test_test_user_without_request(self):
rule = GroupMembershipRule(group=self.group)
self.assertTrue(rule.test_user(None, self.request.user))

def test_test_user_without_user_or_request(self):
rule = GroupMembershipRule(group=self.group)
self.assertFalse(rule.test_user(None))


class TestArticleTagRuleSegmentation(TestCase, MoloTestCaseMixin):
def setUp(self):
Expand Down

0 comments on commit 92300b1

Please sign in to comment.