From 930cf8ce0498d674bf9277f5f8fefec5d3b256d1 Mon Sep 17 00:00:00 2001 From: Kaitlyn Crawford Date: Fri, 9 Mar 2018 19:36:52 +0200 Subject: [PATCH 1/3] Return false for test_user if rules are invalid --- molo/surveys/rules.py | 14 ++++++++++++-- molo/surveys/tests/test_rules.py | 10 ++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/molo/surveys/rules.py b/molo/surveys/rules.py index 1a90801..0ca1b97 100644 --- a/molo/surveys/rules.py +++ b/molo/surveys/rules.py @@ -4,7 +4,7 @@ from django import forms from django.apps import apps from django.conf import settings -from django.core.exceptions import ValidationError +from django.core.exceptions import ValidationError, ObjectDoesNotExist from django.db import models from django.test.client import RequestFactory from django.utils import six, timezone @@ -297,7 +297,11 @@ def test_user(self, request, user=None): if not user: return False - submission_class = self.survey.get_submission_class() + # Django formsets don't honour 'required' fields so check rule is valid + try: + submission_class = self.survey.get_submission_class() + except ObjectDoesNotExist: + return False return submission_class.objects.filter( user=user, @@ -463,6 +467,12 @@ def test_user(self, request, user=None): # Return false if we don't have a user or a request return False + # Django formsets don't honour 'required' fields so check rule is valid + try: + self.tag + except ObjectDoesNotExist: + return False + from wagtail_personalisation.adapters import get_segment_adapter operator = self.OPERATORS[self.operator] adapter = get_segment_adapter(request) diff --git a/molo/surveys/tests/test_rules.py b/molo/surveys/tests/test_rules.py index 29e80cd..18aab0c 100644 --- a/molo/surveys/tests/test_rules.py +++ b/molo/surveys/tests/test_rules.py @@ -415,6 +415,11 @@ def test_other_user_submitted_fails(self): self.request.user = new_user self.assertTrue(rule.test_user(self.request)) + def test_call_test_user_on_invalid_rule_fails(self): + self.submit_survey(self.survey, self.user) + rule = SurveyResponseRule() + self.assertFalse(rule.test_user(None, self.request.user)) + def test_call_test_user_without_request(self): self.submit_survey(self.survey, self.user) rule = SurveyResponseRule(survey=self.survey) @@ -644,6 +649,11 @@ def test_visting_non_tagged_page_isnt_error(self): self.adapter.add_page_visit(self.main) self.assertFalse(self.request.session['tag_count']) + def test_call_test_user_on_invalid_rule_fails(self): + rule = ArticleTagRule() + self.adapter.add_page_visit(self.article) + self.assertFalse(rule.test_user(None, self.request.user)) + def test_call_test_user_without_request(self): rule = ArticleTagRule( tag=self.tag, From b15354baf7e53dabb0ac998fea4305e17b41f506 Mon Sep 17 00:00:00 2001 From: Kaitlyn Crawford Date: Fri, 9 Mar 2018 20:40:47 +0200 Subject: [PATCH 2/3] Increase wagtail-personalisation-molo to 0.11.3 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index b13554b..e15ea06 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ celery<4.0 dateparser>=0.7.0,<0.8.0 django-celery wagtailsurveys==0.1.1 -wagtail-personalisation-molo==0.11.2 +wagtail-personalisation-molo==0.11.3 psycopg2 html5lib==0.9999999 six==1.11.0 From ae62dccc32cacb8998fef64974d1440df7e16d06 Mon Sep 17 00:00:00 2001 From: Kaitlyn Crawford Date: Fri, 9 Mar 2018 20:55:45 +0200 Subject: [PATCH 3/3] Version 6.7.5 --- CHANGES.rst | 5 +++++ VERSION | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index acb242c..1cce037 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,5 +1,10 @@ CHANGE LOG ========== +6.7.5 +----- +- Bugfix: Handle errors when testing invalid rules +- Upgrade wagtail-personalisation-molo to 0.11.3 + 6.7.4 ----- - Upgrade wagtail-personalisation-molo to 0.11.2 diff --git a/VERSION b/VERSION index 29310f4..c56facf 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.7.4 +6.7.5