[Erp5-report] r29000 - /erp5/trunk/products/ERP5/tests/testEditorField.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Sun Sep 13 14:22:00 CEST 2009
Author: jp
Date: Sun Sep 13 14:22:00 2009
New Revision: 29000
URL: http://svn.erp5.org?rev=29000&view=rev
Log:
initial upload of a test which is useful to make sure that all kinds of editor fields are consistent
Added:
erp5/trunk/products/ERP5/tests/testEditorField.py
Added: erp5/trunk/products/ERP5/tests/testEditorField.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testEditorField.py?rev=29000&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/tests/testEditorField.py (added)
+++ erp5/trunk/products/ERP5/tests/testEditorField.py [utf8] Sun Sep 13 14:22:00 2009
@@ -1,0 +1,279 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (c) 2004, 2005, 2006, 2009 Nexedi SA and Contributors.
+# All Rights Reserved.
+# Romain Courteaud <romain at nexedi.com>
+# Jean-Paul Smets <jp at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsibility of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# guarantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+import re
+import unittest
+
+import transaction
+from AccessControl import Unauthorized
+from AccessControl.SecurityManagement import newSecurityManager
+from AccessControl.SecurityManagement import getSecurityManager
+from Testing import ZopeTestCase
+from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
+from Products.ERP5Type.tests.utils import DummyLocalizer
+from Products.ERP5Type.tests.utils import createZODBPythonScript
+
+class TestEditorField(ERP5TypeTestCase, ZopeTestCase.Functional):
+ """
+ The goal of this test is to cover the different application cases
+ of EditorField in ERP5 CRM, ERP5 Web, etc. and make sure that
+ 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.
+ """
+ manager_username = 'zope'
+ manager_password = 'zope'
+
+ def getTitle(self):
+ return "EditorField"
+
+ def login(self):
+ uf = self.getPortal().acl_users
+ uf._doAddUser(self.manager_username, self.manager_password, ['Manager', ], [])
+ user = uf.getUserById(self.manager_username).__of__(uf)
+ newSecurityManager(None, user)
+
+ def getBusinessTemplateList(self):
+ """
+ Return the list of required business templates.
+ """
+ return ('erp5_base',
+ 'erp5_web',
+ 'erp5_ingestion',
+ 'erp5_ingestion_mysql_innodb_catalog',
+ 'erp5_crm',
+ 'erp5_forge',
+ )
+
+ def afterSetUp(self):
+ self.login()
+ portal = self.getPortal()
+ self.web_page_module = self.portal.web_page_module
+ self.web_site_module = self.portal.web_site_module
+ self.event_module = self.portal.event_module
+ portal.Localizer.manage_changeDefaultLang(language = 'en')
+ self.portal_id = self.portal.getId()
+
+ def clearModule(self, module):
+ module.manage_delObjects(list(module.objectIds()))
+ transaction.commit()
+ self.tic()
+
+ def beforeTearDown(self):
+ self.clearModule(self.portal.web_site_module)
+ self.clearModule(self.portal.web_page_module)
+ self.clearModule(self.portal.person_module)
+
+ def getDefaultSitePreference(self):
+ return self.getPreferenceTool().default_site_preference
+
+ def _testPreferredDocumentEditor(self, event, 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)
+ 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)
+ # then on portal preferences
+ self.assertEquals(self.getPreferenceTool().getPreferredTextEditor(), editor)
+ # Make sure editor field preference is also set
+ form = getattr(event, form_id)
+ field = getattr(form, field_id)
+ self.assertEquals(field.get_value('text_editor'), editor)
+
+ def _isFCKEditor(self, html_text, field_id, text_content):
+ """
+ Tries to find in the HTML page string portions
+ which show that text content is displayed using
+ FCKEditor for the given field_id
+
+ html_text -- the HTML string to analyze
+
+ field_id -- the id of the field in the form
+
+ text_content -- the embedded text content
+ """
+ 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:
+ return False
+ if html_text.find(match_string2) == -1:
+ return False
+ return True
+
+ def _isTextAreaEditor(self, html_text, field_id, text_content):
+ """
+ Tries to find in the HTML page string portions
+ which show that text content is displayed using
+ TextArea for the given field_id
+
+ html_text -- the HTML string to analyze
+
+ field_id -- the id of the field in the form
+
+ text_content -- the embedded text content
+ """
+ match_string = """name="field_%s" >%s</textarea>""" % (field_id, text_content)
+ if html_text.find(match_string) == -1:
+ return False
+ return True
+
+ def _isReadOnlyEditor(self, html_text, document):
+ """
+ Tries to find in the HTML page string portions
+ which show that text content is displayed in read
+ only mode with 'page' CSS class in a <div>
+
+ html_text -- the HTML string to analyze
+
+ document -- the document which content is displayed in
+ 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"""
+ 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
+
+ def test_EditSimpleEmailEventFCKEditor(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
+ """
+ # Create an event
+ event = self.event_module.newContent(portal_type='Note')
+ text_content = """Hé Hé\nHo Ho\nHi Hi"""
+ 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')
+
+ # Make sure generated HTML is based on FCKEditor
+ 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._isFCKEditor(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_EditSimpleEmailEventTextArea(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
+ """
+ # Create an event
+ event = self.event_module.newContent(portal_type='Note')
+ text_content = """Hé Hé\nHo Ho\nHi Hi"""
+ 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')
+
+ # Make sure generated HTML is based on FCKEditor
+ 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_EditWebPageFCKEditor(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.
+ """
+ # 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.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')
+
+ # 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):
+ """
+ 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.
+ """
+ # 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.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')
+
+ # 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_suite():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(TestEditorField))
+ return suite
More information about the Erp5-report
mailing list