From dfbf8c09268b301f8808a95b385d746610dbbe98 Mon Sep 17 00:00:00 2001 From: Jean-Paul Smets <jp@nexedi.com> Date: Sun, 13 Sep 2009 14:04:27 +0000 Subject: [PATCH] Test suite for EditorField which covers HTML/Text and Event/Web Page cases. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@29005 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/tests/testEditorField.py | 163 ++++++++++++++++++++++---- 1 file changed, 142 insertions(+), 21 deletions(-) diff --git a/product/ERP5/tests/testEditorField.py b/product/ERP5/tests/testEditorField.py index 247200bb12..1c3526b49a 100644 --- a/product/ERP5/tests/testEditorField.py +++ b/product/ERP5/tests/testEditorField.py @@ -48,6 +48,9 @@ class TestEditorField(ERP5TypeTestCase, ZopeTestCase.Functional): proxy fields are designed in a consistent way. This test has been created after some changes in erp5_core had impact on other business templates. + + Please refer to the ERP5 developer howto for more explanation + http://www.erp5.org/HowToDisplayOrEditHTML """ manager_username = 'zope' manager_password = 'zope' @@ -95,22 +98,22 @@ class TestEditorField(ERP5TypeTestCase, ZopeTestCase.Functional): def getDefaultSitePreference(self): return self.getPreferenceTool().default_site_preference - def _testPreferredDocumentEditor(self, event, editor, form_id, field_id): + def _testPreferredDocumentEditor(self, event, preferred_editor, editor, form_id, field_id): """ Common code to test if current document (event) is using appropriate editor (editor) as defined in preferences """ - self.getDefaultSitePreference().setPreferredTextEditor(editor) + self.getDefaultSitePreference().setPreferredTextEditor(preferred_editor) if self.getDefaultSitePreference().getPreferenceState() == 'global': self.getDefaultSitePreference()._clearCache() else: self.getDefaultSitePreference().enable() # Make sure preferred editor was set on preference - self.assertEquals(self.getDefaultSitePreference().getPreferredTextEditor(), editor) + self.assertEquals(self.getDefaultSitePreference().getPreferredTextEditor(), preferred_editor) # then on portal preferences - self.assertEquals(self.getPreferenceTool().getPreferredTextEditor(), editor) + self.assertEquals(self.getPreferenceTool().getPreferredTextEditor(), preferred_editor) # Make sure editor field preference is also set form = getattr(event, form_id) field = getattr(form, field_id) @@ -131,8 +134,12 @@ class TestEditorField(ERP5TypeTestCase, ZopeTestCase.Functional): match_string1 = "var oFCKeditor = new FCKeditor('field_%s');" % field_id match_string2 = "oFCKeditor.Value = '%s';" % ('\\n'.join(text_content.splitlines())) if html_text.find(match_string1) == -1: + print html_text + print match_string1 return False if html_text.find(match_string2) == -1: + print html_text + print match_string2 return False return True @@ -150,6 +157,8 @@ class TestEditorField(ERP5TypeTestCase, ZopeTestCase.Functional): """ match_string = """name="field_%s" >%s</textarea>""" % (field_id, text_content) if html_text.find(match_string) == -1: + print html_text + print match_string return False return True @@ -165,10 +174,8 @@ class TestEditorField(ERP5TypeTestCase, ZopeTestCase.Functional): read only mode """ text_content = document.asStrippedHTML() - # Some reformatting needed to simulate page templates - text_content = '<br />\n'.join(text_content.split('<br />')) match_string1 = """<div class="input">%s</div>""" % text_content - match_string2 = """"<div class="field page""" + match_string2 = """<div class="field page""" if html_text.find(match_string1) == -1: print html_text print match_string1 @@ -179,20 +186,22 @@ class TestEditorField(ERP5TypeTestCase, ZopeTestCase.Functional): return False return True - def test_EditSimpleEmailEventFCKEditor(self): + def test_EditSimpleEmailEventFCKEditorHTML(self): """ Create an event, make sure portal preferences are set as FCKEditor and make sure FCKEditor is displayed in the default view of a CRM event + + In this case we use HTML content for the test. """ # Create an event event = self.event_module.newContent(portal_type='Note') - text_content = """Hé Hé\nHo Ho\nHi Hi""" + text_content = """<p>Hé Hé\nHo Ho\nHi Hi</p>""" event.setTextFormat('text/html') event.setTextContent(text_content) # Set FCKEditor as preferred editor and make sure it is taken into account - self._testPreferredDocumentEditor(event, 'fck_editor', 'Event_view', 'my_text_content') + self._testPreferredDocumentEditor(event, 'fck_editor', 'fck_editor', 'Event_view', 'my_text_content') # Make sure generated HTML is based on FCKEditor request=self.app.REQUEST @@ -207,22 +216,86 @@ class TestEditorField(ERP5TypeTestCase, ZopeTestCase.Functional): html_text = event.view() self.assertTrue(self._isReadOnlyEditor(html_text, event)) - def test_EditSimpleEmailEventTextArea(self): + def test_EditSimpleEmailEventFCKEditorText(self): """ Create an event, make sure portal preferences are set as - TextArea and make sure TextArea is displayed in the + FCKEditor and make sure FCKEditor is displayed in the default view of a CRM event + + In this case we use Text content for the test. """ # Create an event event = self.event_module.newContent(portal_type='Note') text_content = """Hé Hé\nHo Ho\nHi Hi""" + event.setTextFormat('text/plain') + event.setTextContent(text_content) + + # Set FCKEditor as preferred editor and make sure text_area is used since + # we are not doing HTML + self._testPreferredDocumentEditor(event, 'fck_editor', 'text_area', 'Event_view', 'my_text_content') + + # Make sure generated HTML is based on TextArea since this is not HTML + request=self.app.REQUEST + request.set('URLPATH2', '/arbitrary/path') # A hack to make sure FCKEditor page template renders + html_text = event.view() + self.assertTrue(self._isTextAreaEditor(html_text, 'my_text_content', text_content)) + + # Set a fake file on Event and make sure no more editor is displayed + # and that instead a div with page CSS style appears with stripped HTML + event.setData('fake') + self.assertFalse(event.Event_view.my_text_content.get_value('editable')) + html_text = event.view() + self.assertTrue(self._isReadOnlyEditor(html_text, event)) + + def test_EditSimpleEmailEventTextAreaHTML(self): + """ + Create an event, make sure portal preferences are set as + TextArea and make sure TextArea is displayed in the + default view of a CRM event + + In this case we use HTML content for the test. + """ + # Create an event + event = self.event_module.newContent(portal_type='Note') + text_content = """<p>Hé Hé\nHo Ho\nHi Hi</p>""" event.setTextFormat('text/html') event.setTextContent(text_content) - # Set FCKEditor as preferred editor and make sure it is taken into account - self._testPreferredDocumentEditor(event, 'text_area', 'Event_view', 'my_text_content') + # Set TextArea as preferred editor and make sure it is taken into account + self._testPreferredDocumentEditor(event, 'text_area', 'text_area', 'Event_view', 'my_text_content') - # Make sure generated HTML is based on FCKEditor + # Make sure generated HTML is based on TextArea + html_text = event.view() + # text_content is processed to simulate the way TextArea does + text_content = text_content.replace('<', '<') + text_content = text_content.replace('>', '>') + self.assertTrue(self._isTextAreaEditor(html_text, 'my_text_content', text_content)) + + # Set a fake file on Event and make sure no more editor is displayed + # and that instead a div with page CSS style appears with stripped HTML + event.setData('fake') + self.assertFalse(event.Event_view.my_text_content.get_value('editable')) + html_text = event.view() + self.assertTrue(self._isReadOnlyEditor(html_text, event)) + + def test_EditSimpleEmailEventTextAreaText(self): + """ + Create an event, make sure portal preferences are set as + TextArea and make sure TextArea is displayed in the + default view of a CRM event + + In this case we use Text content for the test. + """ + # Create an event + event = self.event_module.newContent(portal_type='Note') + text_content = """Hé Hé\nHo Ho\nHi Hi""" + event.setTextFormat('text/plain') + event.setTextContent(text_content) + + # Set TextArea as preferred editor and make sure it is taken into account + self._testPreferredDocumentEditor(event, 'text_area', 'text_area', 'Event_view', 'my_text_content') + + # Make sure generated HTML is based on TextArea html_text = event.view() self.assertTrue(self._isTextAreaEditor(html_text, 'my_text_content', text_content)) @@ -233,40 +306,88 @@ class TestEditorField(ERP5TypeTestCase, ZopeTestCase.Functional): html_text = event.view() self.assertTrue(self._isReadOnlyEditor(html_text, event)) - def test_EditWebPageFCKEditor(self): + def test_EditWebPageFCKEditorHTML(self): """ Create a web page. Make sure portal preferences are set as TextArea and make sure TextArea is displayed in the editor view of a Web Page. + + In this case we use HTML content for the test. """ # Create a web page page = self.web_page_module.newContent(portal_type='Web Page') - text_content = """Hé Hé\nHo Ho\nHi Hi""" + text_content = """<p>Hé Hé\nHo Ho\nHi Hi</p>""" page.setTextFormat('text/html') page.setTextContent(text_content) # Set FCKEditor as preferred editor and make sure it is taken into account - self._testPreferredDocumentEditor(page, 'fck_editor', 'WebPage_viewEditor', 'my_text_content') + self._testPreferredDocumentEditor(page, 'fck_editor', 'fck_editor', 'WebPage_viewEditor', 'my_text_content') # Make sure default view is read only html_text = page.WebPage_view() self.assertFalse(page.WebPage_view.text_content.get_value('editable')) self.assertTrue(self._isReadOnlyEditor(html_text, page)) - def test_EditWebPageTextArea(self): + def test_EditWebPageFCKEditorText(self): """ Create a web page. Make sure portal preferences are set as TextArea and make sure TextArea is displayed in the editor view of a Web Page. + + In this case we use Text content for the test. """ # Create a web page page = self.web_page_module.newContent(portal_type='Web Page') text_content = """Hé Hé\nHo Ho\nHi Hi""" - page.setTextFormat('text/html') + page.setTextFormat('text/plain') page.setTextContent(text_content) # Set FCKEditor as preferred editor and make sure it is taken into account - self._testPreferredDocumentEditor(page, 'text_area', 'WebPage_viewEditor', 'my_text_content') + self._testPreferredDocumentEditor(page, 'fck_editor', 'text_area', 'WebPage_viewEditor', 'my_text_content') + + # Make sure default view is read only + html_text = page.WebPage_view() + self.assertFalse(page.WebPage_view.text_content.get_value('editable')) + self.assertTrue(self._isReadOnlyEditor(html_text, page)) + + def test_EditWebPageTextAreaHTML(self): + """ + Create a web page. Make sure portal preferences are set as + TextArea and make sure TextArea is displayed in the + editor view of a Web Page. + + In this case we use HTML content for the test. + """ + # Create a web page + page = self.web_page_module.newContent(portal_type='Web Page') + text_content = """<p>Hé Hé\nHo Ho\nHi Hi</p>""" + page.setTextFormat('text/html') + page.setTextContent(text_content) + + # Set TextArea as preferred editor and make sure it is taken into account + self._testPreferredDocumentEditor(page, 'text_area', 'text_area', 'WebPage_viewEditor', 'my_text_content') + + # Make sure default view is read only + html_text = page.WebPage_view() + self.assertFalse(page.WebPage_view.text_content.get_value('editable')) + self.assertTrue(self._isReadOnlyEditor(html_text, page)) + + def test_EditWebPageTextAreaText(self): + """ + Create a web page. Make sure portal preferences are set as + TextArea and make sure TextArea is displayed in the + editor view of a Web Page. + + In this case we use Text content for the test. + """ + # Create a web page + page = self.web_page_module.newContent(portal_type='Web Page') + text_content = """Hé Hé\nHo Ho\nHi Hi""" + page.setTextFormat('text/plain') + page.setTextContent(text_content) + + # Set TextArea as preferred editor and make sure it is taken into account + self._testPreferredDocumentEditor(page, 'text_area', 'text_area', 'WebPage_viewEditor', 'my_text_content') # Make sure default view is read only html_text = page.WebPage_view() -- 2.30.9