diff --git a/src/personalisation/adapters.py b/src/personalisation/adapters.py index 508033f..8b72e39 100644 --- a/src/personalisation/adapters.py +++ b/src/personalisation/adapters.py @@ -24,15 +24,18 @@ class BaseSegmentsAdapter(object): def check_segment_exists(self): return None - def _test_rules(self, rules, request): + def _test_rules(self, rules, request, match_any=False): if len(rules) > 0: for rule in rules: result = rule.test_user(request) + if match_any: + if result is True: + return result - if result is False: + elif result is False: return False - - return True + if not match_any: + return True return False class Meta: @@ -81,7 +84,7 @@ class SessionSegmentsAdapter(BaseSegmentsAdapter): segment_rules = [] for rule in rules: segment_rules += rule.objects.filter(segment=segment) - result = self._test_rules(segment_rules, self.request) + result = self._test_rules(segment_rules, self.request, match_any=segment.match_any) if result: self.add(segment) diff --git a/src/personalisation/models.py b/src/personalisation/models.py index 31a2392..0ea9166 100644 --- a/src/personalisation/models.py +++ b/src/personalisation/models.py @@ -336,7 +336,7 @@ class PersonalisablePage(Page): return not self.canonical_page and self.has_variations -@cached_classmethodx +@cached_classmethod def get_edit_handler(cls): tabs = [] if cls.content_panels: diff --git a/tests/unit/test_middleware.py b/tests/unit/test_middleware.py index f6159da..515bc66 100644 --- a/tests/unit/test_middleware.py +++ b/tests/unit/test_middleware.py @@ -227,9 +227,7 @@ class TestUserSegmenting(object): ) client.get('/?test=test') - import pdb - pdb.set_trace() - + assert any(item['encoded_name'] == 'match-any' for item in client.session['segments']) @pytest.mark.django_db