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