From 7204717f77f34a7000249a558c2a6ccc87a247af Mon Sep 17 00:00:00 2001 From: Todd Dembrey <todd.dembrey@torchbox.com> Date: Mon, 19 Feb 2018 11:36:36 +0000 Subject: [PATCH] Add more tests for searchable content --- opentech/apply/funds/blocks.py | 4 ++++ opentech/apply/funds/models.py | 2 +- opentech/apply/funds/tests/factories/blocks.py | 6 ++++++ opentech/apply/funds/tests/test_models.py | 9 ++++++++- opentech/apply/stream_forms/blocks.py | 17 ++++++++++------- 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/opentech/apply/funds/blocks.py b/opentech/apply/funds/blocks.py index 41f799aac..4a759e0ef 100644 --- a/opentech/apply/funds/blocks.py +++ b/opentech/apply/funds/blocks.py @@ -1,5 +1,6 @@ from collections import Counter +import bleach from django import forms from django.core.exceptions import ValidationError from django.forms.utils import ErrorList @@ -58,6 +59,9 @@ class RichTextFieldBlock(TextFieldBlock): label = _('Rich text field') icon = 'form' + def get_searchable_content(self, value, data): + return bleach.clean(data, tags=[], strip=True) + class CustomFormFieldsBlock(FormFieldsBlock): rich_text = RichTextFieldBlock(group=_('Fields')) diff --git a/opentech/apply/funds/models.py b/opentech/apply/funds/models.py index e625a4fe4..e66a6cd43 100644 --- a/opentech/apply/funds/models.py +++ b/opentech/apply/funds/models.py @@ -503,7 +503,7 @@ class ApplicationSubmission(WorkflowHelpers, AbstractFormSubmission): def render_answers(self): context = {'fields': list()} # type: ignore - for data, field, block in self.data_and_fields(): + for data, field in self.data_and_fields(): data = self.prepare_value(field, data) context['fields'].append({ 'field': field, diff --git a/opentech/apply/funds/tests/factories/blocks.py b/opentech/apply/funds/tests/factories/blocks.py index 57ad29c4f..f8ab0e08e 100644 --- a/opentech/apply/funds/tests/factories/blocks.py +++ b/opentech/apply/funds/tests/factories/blocks.py @@ -40,9 +40,15 @@ class FullNameBlockFactory(FormFieldBlockFactory): model = blocks.FullNameBlock +class RichTextFieldBlockFactory(FormFieldBlockFactory): + class Meta: + model = blocks.RichTextFieldBlock + + CustomFormFieldsFactory = wagtail_factories.StreamFieldFactory({ 'email': EmailBlockFactory, 'full_name': FullNameBlockFactory, 'char': CharFieldBlockFactory, 'radios': RadioFieldBlockFactory, + 'rich_text': RichTextFieldBlockFactory, }) diff --git a/opentech/apply/funds/tests/test_models.py b/opentech/apply/funds/tests/test_models.py index ad0fb3a5a..e586d166f 100644 --- a/opentech/apply/funds/tests/test_models.py +++ b/opentech/apply/funds/tests/test_models.py @@ -342,13 +342,20 @@ class TestApplicationSubmission(TestCase): submissions, ) - def test_richtext_is_removed_for_search(self): + def test_richtext_in_char_is_removed_for_search(self): text = 'I am text' rich_text = f'<b>{text}</b>' submission = self.make_submission(form_data__char=rich_text) self.assertNotIn(rich_text, submission.search_data) self.assertIn(text, submission.search_data) + def test_richtext_is_removed_for_search(self): + text = 'I am text' + rich_text = f'<b>{text}</b>' + submission = self.make_submission(form_data__rich_text=rich_text) + self.assertNotIn(rich_text, submission.search_data) + self.assertIn(text, submission.search_data) + def test_choices_added_for_search(self): choices = ['blah', 'foo'] submission = self.make_submission(form_fields__radios__choices=choices, form_data__radios=['blah']) diff --git a/opentech/apply/stream_forms/blocks.py b/opentech/apply/stream_forms/blocks.py index c7920157e..bf2eeae46 100644 --- a/opentech/apply/stream_forms/blocks.py +++ b/opentech/apply/stream_forms/blocks.py @@ -46,7 +46,7 @@ class FormFieldBlock(StructBlock): **self.get_field_kwargs(struct_value)) def get_searchable_content(self, value, data): - return bleach.clean(data, tags=[], strip=True) + return str(data) class OptionalFormFieldBlock(FormFieldBlock): @@ -74,6 +74,9 @@ class CharFieldBlock(OptionalFormFieldBlock): return forms.EmailField return super().get_field_class(struct_value) + def get_searchable_content(self, value, data): + return bleach.clean(data, tags=[], strip=True) + class TextFieldBlock(OptionalFormFieldBlock): default_value = TextBlock(required=False, label=_('Default value')) @@ -83,6 +86,9 @@ class TextFieldBlock(OptionalFormFieldBlock): class Meta: label = _('Text field (multi line)') + def get_searchable_content(self, value, data): + return bleach.clean(data, tags=[], strip=True) + class NumberFieldBlock(OptionalFormFieldBlock): default_value = CharBlock(required=False, label=_('Default value')) @@ -102,9 +108,6 @@ class CheckboxFieldBlock(FormFieldBlock): label = _('Checkbox field') icon = 'tick-inverse' - def get_searchable_content(self, value, data): - return data - class RadioButtonsFieldBlock(OptionalFormFieldBlock): choices = ListBlock(CharBlock(label=_('Choice'))) @@ -123,9 +126,6 @@ class RadioButtonsFieldBlock(OptionalFormFieldBlock): for choice in struct_value['choices']] return kwargs - def get_searchable_content(self, value, data): - return data - class DropdownFieldBlock(RadioButtonsFieldBlock): widget = forms.Select @@ -158,6 +158,9 @@ class CheckboxesFieldBlock(OptionalFormFieldBlock): for choice in struct_value['checkboxes']] return kwargs + def get_searchable_content(self, value, data): + return data + class DatePickerInput(forms.DateInput): def __init__(self, *args, **kwargs): -- GitLab