Store record count on a segment when it is created
This commit is contained in:
@ -1,5 +1,6 @@
|
|||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
from importlib import import_module
|
from importlib import import_module
|
||||||
from itertools import takewhile
|
from itertools import takewhile
|
||||||
|
|
||||||
@ -86,6 +87,16 @@ class SegmentAdminForm(WagtailAdminModelForm):
|
|||||||
if not self.instance.is_static:
|
if not self.instance.is_static:
|
||||||
self.instance.count = 0
|
self.instance.count = 0
|
||||||
|
|
||||||
|
if is_new:
|
||||||
|
rules = [
|
||||||
|
form.instance for formset in self.formsets.values()
|
||||||
|
for form in formset
|
||||||
|
if form not in formset.deleted_forms
|
||||||
|
]
|
||||||
|
self.instance.matched_users_count = self.count_matching_users(
|
||||||
|
rules, self.instance.match_any)
|
||||||
|
self.instance.matched_count_updated_at = datetime.now()
|
||||||
|
|
||||||
instance = super(SegmentAdminForm, self).save(*args, **kwargs)
|
instance = super(SegmentAdminForm, self).save(*args, **kwargs)
|
||||||
|
|
||||||
if is_new and instance.is_static and instance.all_rules_static:
|
if is_new and instance.is_static and instance.all_rules_static:
|
||||||
|
@ -357,3 +357,25 @@ def test_count_matching_users_handles_match_all(site, client, django_user_model)
|
|||||||
form = form_with_data(segment, first_rule, s_rule)
|
form = form_with_data(segment, first_rule, s_rule)
|
||||||
|
|
||||||
assert form.count_matching_users([first_rule, s_rule], False) is 1
|
assert form.count_matching_users([first_rule, s_rule], False) is 1
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_matched_user_count_added_to_segment_at_creation(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)
|
||||||
|
instance = form.save()
|
||||||
|
|
||||||
|
assert instance.matched_users_count is 2
|
||||||
|
Reference in New Issue
Block a user