[Erp5-report] r31635 romain - /erp5/trunk/products/ERP5/tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Jan 7 15:49:14 CET 2010


Author: romain
Date: Thu Jan  7 15:49:12 2010
New Revision: 31635

URL: http://svn.erp5.org?rev=31635&view=rev
Log:
Test if some business template follow the Field Library creation convention.

Added:
    erp5/trunk/products/ERP5/tests/testFieldLibraryGuideline.py
Modified:
    erp5/trunk/products/ERP5/tests/testXHTML.py

Added: erp5/trunk/products/ERP5/tests/testFieldLibraryGuideline.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testFieldLibraryGuideline.py?rev=31635&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/tests/testFieldLibraryGuideline.py (added)
+++ erp5/trunk/products/ERP5/tests/testFieldLibraryGuideline.py [utf8] Thu Jan  7 15:49:12 2010
@@ -1,0 +1,375 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved.
+#               Romain Courteaud <romain at nexedi.com>
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability 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
+# garantees 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 unittest
+import os
+import transaction
+
+from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
+from Products.CMFCore.utils import getToolByName
+from zLOG import LOG
+from Products.ERP5Type.tests.Sequence import SequenceList
+
+class TestFieldLibraryGuideline(ERP5TypeTestCase):
+  business_template_title = 'erp5_geek'
+  skin_folder_name = 'erp5_geek'
+  field_library_id = 'Base_viewGeekFieldLibrary'
+  wrong_field_library_id = 'Geek_viewFieldLibrary'
+  form_id = 'Base_viewGeek'
+
+  def getTitle(self):
+    return "Field Library Guideline Test"
+
+  def getBusinessTemplateList(self):
+    """  """
+    return (
+      'erp5_base',
+      'erp5_forge',
+      )
+
+  def beforeTearDown(self):
+    """
+    Remove objects created in tests.
+    """
+    # Remove skin folder
+    if 'erp5_geek' in self.getSkinsTool().objectIds():
+      self.getSkinsTool().manage_delObjects(['erp5_geek'])
+      ps = self.getSkinsTool()
+      for skin_name, selection in ps.getSkinPaths():
+        new_selection = []
+        selection = selection.split(',')
+        for skin_id in selection:
+          if skin_id != 'erp5_geek':
+            new_selection.append(skin_id)
+        ps.manage_skinLayers(skinpath=tuple(new_selection),
+                             skinname=skin_name, add_skin=1)
+    transaction.commit()
+
+  def stepCreateSkinFolder(self, sequence=None, sequence_list=None, **kw):
+    """
+    Create a skin folder
+    """
+    ps = self.getSkinsTool()
+    ps.manage_addProduct['OFSP'].manage_addFolder(self.skin_folder_name)
+    skin_folder = ps._getOb(self.skin_folder_name, None)
+    self.failUnless(skin_folder is not None)
+    sequence.edit(skin_folder_id=skin_folder.getId())
+    # add skin in layers
+    for skin_name, selection in ps.getSkinPaths():
+      selection = selection.split(',')
+      selection.append(self.skin_folder_name)
+      ps.manage_skinLayers(skinpath=tuple(selection), skinname=skin_name, 
+                           add_skin=1)
+
+  def stepCreateNewBusinessTemplate(self, sequence=None, 
+                                    sequence_list=None, **kw):
+    """
+    Create a new Business Template
+    """
+    template_tool = self.getTemplateTool()
+    template = template_tool.newContent(
+        portal_type='Business Template',
+        title=self.business_template_title,
+        template_skin_id_list=[self.skin_folder_name])
+    sequence.edit(custom_business_template=template)
+
+  def stepCheckMissingFieldLibrary(self, sequence=None, 
+                                   sequence_list=None, **kw):
+    """
+    Check that the dialog propose to create the field library
+    """
+    business_template = sequence.get('custom_business_template')
+    modifiable_field_list = \
+        business_template.BusinessTemplate_getModifiableFieldList()
+    self.assertEquals(1, len(modifiable_field_list))
+    modifiable_field = modifiable_field_list[0]
+    self.assertEquals('1_create_form', modifiable_field.choice[0])
+    self.assertEquals('%s/%s' % (self.skin_folder_name, self.field_library_id), 
+                      modifiable_field.object_id)
+
+  def test_01_missingFieldLibrary(self):
+    """
+    Create an business template with an empty skin folder.
+    Check that the 'Manage Field Library' action propose to create the field
+    library.
+    """
+    sequence_list = SequenceList()
+    sequence_string = '\
+                       CreateSkinFolder \
+                       CreateNewBusinessTemplate \
+                       CheckMissingFieldLibrary \
+                       '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)
+
+  def createForm(self, form_id):
+    skin_tool = self.getSkinsTool()
+    skin_folder = skin_tool._getOb(self.skin_folder_name)
+    addERP5Form = skin_folder.manage_addProduct['ERP5Form'].addERP5Form
+    addERP5Form(form_id, 'View')
+    return skin_folder._getOb(form_id)
+
+  def stepCreateFieldLibrary(self, sequence=None, 
+                             sequence_list=None, **kw):
+    """
+    Create a Field Library
+    """
+    form = self.createForm(self.field_library_id)
+    sequence.edit(field_library=form)
+
+  def stepCreateForm(self, sequence=None, 
+                     sequence_list=None, **kw):
+    """
+    Create a Form
+    """
+    form = self.createForm(self.form_id)
+    sequence.edit(form=form)
+
+  def stepCreateNotProxifiedField(self, sequence=None, 
+                                  sequence_list=None, **kw):
+    """
+    Create a not proxified field
+    """
+    form = sequence.get('form')
+    addField = form.manage_addProduct['Formulator'].manage_addField
+    addField('my_title', 'Title', 'StringField')
+
+  def stepCheckToProxifyField(self, sequence=None, 
+                         sequence_list=None, **kw):
+    """
+    Check that the dialog propose to proxify the field
+    """
+    business_template = sequence.get('custom_business_template')
+    modifiable_field_list = \
+        business_template.BusinessTemplate_getModifiableFieldList()
+    self.assertEquals(1, len(modifiable_field_list))
+    modifiable_field = modifiable_field_list[0]
+    self.assertEquals('0_keep_non_proxy_field', 
+                      modifiable_field.choice_item_list[0][1])
+    self.assertEquals('%s/%s/my_title' % (self.skin_folder_name, 
+                                          self.form_id),
+                      modifiable_field.object_id)
+
+  def test_02_notProxifiedField(self):
+    """
+    Create an business template with a skin folder containing a Field Library.
+    Add a form to the skin folder.
+    Add a not proxified field inside this form.
+    Check that the 'Manage Field Library' action propose to proxify the field.
+    """
+    sequence_list = SequenceList()
+    sequence_string = '\
+                       CreateSkinFolder \
+                       CreateFieldLibrary \
+                       CreateForm \
+                       CreateNotProxifiedField \
+                       CreateNewBusinessTemplate \
+                       CheckToProxifyField \
+                       '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)
+
+  def stepCreateDeadProxyField(self, sequence=None, 
+                               sequence_list=None, **kw):
+    """
+    Create a dead proxy field
+    """
+    form = sequence.get('form')
+    addField = form.manage_addProduct['Formulator'].manage_addField
+    addField('my_title', 'Title', 'ProxyField')
+
+  def stepCheckDeadFieldDetection(self, sequence=None, 
+                                  sequence_list=None, **kw):
+    """
+    Check that the dialog detects the dead proxy field
+    """
+    business_template = sequence.get('custom_business_template')
+    modifiable_field_list = \
+        business_template.BusinessTemplate_getModifiableFieldList()
+    self.assertEquals(1, len(modifiable_field_list))
+    modifiable_field = modifiable_field_list[0]
+    self.assertEquals('0_keep_dead_proxy_field', 
+                      modifiable_field.choice_item_list[0][1])
+    self.assertEquals('%s/%s/my_title' % (self.skin_folder_name, 
+                                          self.form_id),
+                      modifiable_field.object_id)
+
+  def test_03_deadProxyField(self):
+    """
+    Create an business template with a skin folder containing a Field Library.
+    Add a form to the skin folder.
+    Add a dead proxy field inside this form.
+    Check that the 'Manage Field Library' detects this dead proxy field.
+    """
+    sequence_list = SequenceList()
+    sequence_string = '\
+                       CreateSkinFolder \
+                       CreateFieldLibrary \
+                       CreateForm \
+                       CreateDeadProxyField \
+                       CreateNewBusinessTemplate \
+                       CheckDeadFieldDetection \
+                       '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)
+
+  def stepCreateTemplateField(self, sequence=None, 
+                               sequence_list=None, **kw):
+    """
+    Create a template field
+    """
+    form = sequence.get('field_library')
+    addField = form.manage_addProduct['Formulator'].manage_addField
+    addField('my_title', 'Title', 'ProxyField')
+
+  def stepCheckUnusedTemplateFieldDetection(self, sequence=None, 
+                                            sequence_list=None, **kw):
+    """
+    Check that the dialog detects this unused proxy field.
+    """
+    business_template = sequence.get('custom_business_template')
+    modifiable_field_list = \
+        business_template.BusinessTemplate_getModifiableFieldList()
+    self.assertEquals(1, len(modifiable_field_list))
+    modifiable_field = modifiable_field_list[0]
+    self.assertEquals('0_unused_proxy_field', 
+                      modifiable_field.choice_item_list[0][1])
+    self.assertEquals('%s/%s/my_title' % (self.skin_folder_name, 
+                                          self.field_library_id),
+                      modifiable_field.object_id)
+
+  def test_04_unusedProxyField(self):
+    """
+    Create an business template with a skin folder containing a Field Library.
+    Add a template field inside the field library.
+    Check that the 'Manage Field Library' detects this unused proxy field.
+    """
+    sequence_list = SequenceList()
+    sequence_string = '\
+                       CreateSkinFolder \
+                       CreateFieldLibrary \
+                       CreateTemplateField \
+                       CreateNewBusinessTemplate \
+                       CheckUnusedTemplateFieldDetection \
+                       '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)
+
+  def stepCreateWronglyProxifiedField(self, sequence=None, 
+                                      sequence_list=None, **kw):
+    """
+    Create a wrong proxy field
+    """
+    form = sequence.get('form')
+    addField = form.manage_addProduct['Formulator'].manage_addField
+    addField('my_title', 'Title', 'ProxyField')
+    field = getattr(form, 'my_title')
+    field.manage_edit_xmlrpc(dict(
+            form_id='Organisation_view',
+            field_id='my_title'))
+
+  def stepCheckWrongProxificationDetection(self, sequence=None, 
+                                           sequence_list=None, **kw):
+    """
+    Check that the dialog detects the wrong proxification.
+    """
+    business_template = sequence.get('custom_business_template')
+    modifiable_field_list = \
+        business_template.BusinessTemplate_getModifiableFieldList()
+    self.assertEquals(1, len(modifiable_field_list))
+    modifiable_field = modifiable_field_list[0]
+    self.assertEquals('2_unproxify_field', 
+                      modifiable_field.choice_item_list[0][1])
+    self.assertEquals('%s/%s/my_title' % (self.skin_folder_name, 
+                                          self.form_id),
+                      modifiable_field.object_id)
+
+  def test_05_wrongProxification(self):
+    """
+    Create an business template with a skin folder containing a Field Library.
+    Add a form to the skin folder.
+    Add a proxy field (inside this form) linking to another Field Library.
+
+    Check that the 'Manage Field Library' detects this wrong proxification.
+    """
+    sequence_list = SequenceList()
+    sequence_string = '\
+                       CreateSkinFolder \
+                       CreateFieldLibrary \
+                       CreateForm \
+                       CreateWronglyProxifiedField \
+                       CreateNewBusinessTemplate \
+                       CheckWrongProxificationDetection \
+                       '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)
+
+  def stepCreateWrongFieldLibrary(self, sequence=None, 
+                                  sequence_list=None, **kw):
+    """
+    Create a Field Library with a wrong name.
+    """
+    form = self.createForm(self.wrong_field_library_id)
+    sequence.edit(wrong_field_library=form)
+
+  def stepCheckWrongFieldLibraryDetection(self, sequence=None, 
+                                          sequence_list=None, **kw):
+    """
+    Check that the dialog detects the wrong field library.
+    """
+    business_template = sequence.get('custom_business_template')
+    modifiable_field_list = \
+        business_template.BusinessTemplate_getModifiableFieldList()
+    self.assertEquals(1, len(modifiable_field_list))
+    modifiable_field = modifiable_field_list[0]
+    self.assertEquals('4_delete_form', modifiable_field.choice[0])
+    self.assertEquals('%s/%s' % (self.skin_folder_name, 
+                                 self.wrong_field_library_id), 
+                      modifiable_field.object_id)
+
+  def test_06_wrongFieldLibrary(self):
+    """
+    Create an business template with a skin folder containing a Field Library.
+    Add aother field library in this skin folder.
+    Check that the 'Manage Field Library' detects this wrong field library.
+    """
+    sequence_list = SequenceList()
+    sequence_string = '\
+                       CreateSkinFolder \
+                       CreateFieldLibrary \
+                       CreateWrongFieldLibrary \
+                       CreateNewBusinessTemplate \
+                       CheckWrongFieldLibraryDetection \
+                       '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)
+
+def test_suite():
+  suite = unittest.TestSuite()
+  suite.addTest(unittest.makeSuite(TestFieldLibraryGuideline))
+  return suite

Modified: erp5/trunk/products/ERP5/tests/testXHTML.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testXHTML.py?rev=31635&r1=31634&r2=31635&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testXHTML.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testXHTML.py [utf8] Thu Jan  7 15:49:12 2010
@@ -169,6 +169,20 @@
 
     if error_list:
       message = '\nDead proxy field list\n'
+      for error in error_list:
+        message += '\t%s\n' % str(error)
+      self.fail(message)
+
+  def test_configurationOfFieldLibrary(self):
+    error_list = []
+    for business_template in self.portal.portal_templates.searchFolder():
+      # XXX Impossible to filter by installation state, as it is not catalogued
+      business_template = business_template.getObject()
+      for modifiable_field in business_template.BusinessTemplate_getModifiableFieldList():
+        error_list.append((modifiable_field.object_id,
+                          modifiable_field.choice_item_list[0][0]))
+    if error_list:
+      message = '\nField to modify\n'
       for error in error_list:
         message += '\t%s\n' % str(error)
       self.fail(message)




More information about the Erp5-report mailing list