7

Store record count on a segment when it is created

This commit is contained in:
Kaitlyn Crawford
2018-01-25 15:14:19 +02:00
parent ef271587ec
commit fbcebb43a4
2 changed files with 33 additions and 0 deletions

View File

@ -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:

View File

@ -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