[Erp5-report] r35857 mayoro - /erp5/trunk/products/ERP5/tests/testERP5eGov.py

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Jun 1 13:41:22 CEST 2010


Author: mayoro
Date: Tue Jun  1 13:41:14 2010
New Revision: 35857

URL: http://svn.erp5.org?rev=35857&view=rev
Log:
new version of test for erp5_egov using dynamic form genaration based on pdf and sla, test procedure creation and apllication creation and processing

Modified:
    erp5/trunk/products/ERP5/tests/testERP5eGov.py

Modified: erp5/trunk/products/ERP5/tests/testERP5eGov.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testERP5eGov.py?rev=35857&r1=35856&r2=35857&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testERP5eGov.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testERP5eGov.py [utf8] Tue Jun  1 13:41:14 2010
@@ -1,7 +1,8 @@
+# -*- coding: utf-8 -*-
 ##############################################################################
 #
-# Copyright (c) 2008 Nexedi SARL and Contributors. All Rights Reserved.
-#          Fabien Morin <fabien.morin at gmail.com>
+# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.
+#                 Mayoro DIAGNE <mayoro at gmail.com>
 #
 # WARNING: This program as such is intended to be used by professional
 # programmers who take the whole responsability of assessing all potential
@@ -25,55 +26,311 @@
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 #
 ##############################################################################
-"""
-  test eGov bt.
-
-TODO:
-  this test currently just verify that this bt could be installed,
-  test method must be add to verify things specific to this localised bt.
-"""
-
+
+
+import unittest
+import transaction
+
+from Testing import ZopeTestCase
 from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
 from AccessControl.SecurityManagement import newSecurityManager
-
-class TestERP5eGov(ERP5TypeTestCase):
-
-  run_all_test = 1
-  quiet = 1
+from Products.ERP5Type.tests.utils import FileUpload
+
+from zLOG import LOG
+import os
+
+TEST_FILES_HOME = os.path.join(os.path.dirname(__file__), 'test_data')
+
+def makeFilePath(name):
+  return os.path.join(os.path.dirname(__file__), 'test_data', name)
+
+def makeFileUpload(name, as_name=None):
+  if as_name is None:
+    as_name = name
+  path = makeFilePath(name)
+  return FileUpload(path, as_name)
+
+class TestEgov(ERP5TypeTestCase):
+  """
+  This is the list of test for erp5_egov
+
+  """
+  # define all username corresponding to all roles used in eGov
+  assignor_login = 'chef'
+  assignee_login = 'agent'
+  auditor_login = 'reviewer'
+  associate_login = 'agent_requested'
+
+  def getBusinessTemplateList(self):
+    """return list of business templates to be installed. """
+    bt_list = ['erp5_base',
+               'erp5_web',
+               'erp5_xhtml_style',
+	       'erp5_ingestion',
+               'erp5_dms',
+               'erp5_egov_mysql_innodb_catalog',
+               'erp5_egov',
+	       'egov_categories',]
+    return bt_list
 
   def getTitle(self):
-    return "erp5_egov"
+    return "Test ERP5 EGov"
+
+  #XXX mayoro: these functions will be removed and replaced by subscriptions
+  def createCitizenUser(self):
+    """
+    Create a user with Agent role to allow create and submit requests
+    """
+    uf = self.getPortal().acl_users
+    uf._doAddUser('citizen', '', ['Agent',], [])
+
+  def createValidatorUser(self):
+    """
+    Create a user with Agent role to allow create and submit requests
+    """
+    uf = self.getPortal().acl_users
+    uf._doAddUser('major', '', ['Assignor',], [])
 
   def afterSetUp(self):
-    """Prepare the test."""
-    self.portal = self.getPortal()
-    self.login()
-
-  def login(self, quiet=0, run=1):
     uf = self.getPortal().acl_users
-    uf._doAddUser('admin', 'admin', ['Manager', 'Assignee', 'Assignor',
-                               'Associate', 'Auditor', 'Author'], [])
-    user = uf.getUserById('admin').__of__(uf)
+    uf._doAddUser('seb', '', ['Manager', 'Assignor','Assignee'], [])
+    self.login('seb')
+    user = uf.getUserById('seb').__of__(uf)
     newSecurityManager(None, user)
-
-  def getBusinessTemplateList(self):
-    """ """
-    return ('erp5_base', 'erp5_web', 'erp5_pdf_editor')
-
-
-  def test_01_btInstallation(self, quiet=0, run=run_all_test):
-    '''
-      this test must be replace with real test
-      it's just here because a test method must be present to launch test
-    '''
-    if not run: return
-    if not quiet:
-      self.logMessage('BT Installation')
-    pass
-
-import unittest
+    self.portal = self.getPortalObject()
+    # enable preferences
+    pref = self.portal.portal_preferences._getOb(
+                  'flare_cache_preference', None)
+    if pref is not None:
+      if pref.getPreferenceState() == 'disabled':
+        pref.enable()
+    pref = self.portal.portal_preferences._getOb(
+                  'egov_preference', None)
+    if pref is not None:
+      if pref.getPreferenceState() == 'disabled':
+        pref.enable()
+
+  def beforeTearDown(self):
+    """
+    remove all created objects between two tests, tests are stand-alone
+    """
+    transaction.abort()
+    for module in [ self.getPersonModule(),
+		    self.getOrganisationModule(),
+		      ]:
+      module.manage_delObjects(list(module.objectIds()))
+
+    vat_portal_type = self.portal.portal_types.getTypeInfo('Vat Declaration')
+    vat_module_portal_type = self.portal.portal_types.getTypeInfo('Vat Declaration Module')
+    if vat_portal_type is not None and vat_module_portal_type is not None:
+      vat_module = self.portal.getDefaultModule('Vat Declaration')
+      self.portal.portal_types.manage_delObjects([vat_portal_type.getId(), vat_module_portal_type.getId()])
+      self.portal.manage_delObjects([vat_module.getId(),]) 
+    self.portal.portal_caches.clearAllCache()
+    transaction.commit()
+    self.tic()
+
+  def changeSkin(self, skin_name):
+    """
+      Change current Skin
+    """
+    request = self.app.REQUEST
+    self.portal.portal_skins.changeSkin(skin_name)
+    request.set('portal_skin', skin_name)
+
+
+  def createNewProcedure(self):
+    """
+     This function create a new EGov Type   
+    """
+    return self.portal.portal_types.newContent(portal_type='EGov Type')
+
+
+  def fillProcedureForm(self, procedure=None, procedure_title='fooo'):
+    """
+     This function fill the form of a given procedure. Filled field allow to 
+     generate portal_type and portal_type module of this procedure, it also allow
+     configuring securities of the new module and renaming actions   
+    """
+    # initialize values for new procedure
+    # use accessors to verify if they are dynamically generated
+    if procedure is None:
+      return
+    procedure.setOrganisationDirectionService('dgid/di/cge')
+    procedure.setProcedureTitle(procedure_title)
+    procedure.setProcedurePublicationSection('impots/taxes_indirectes')
+    procedure.setProcedureTarget('entreprise')
+    procedure.setStepAuthentication(1)
+    procedure.setStepPrevalidation(1)
+    procedure.setStepAttachment(1)
+    procedure.setStepPostpayment(1)
+    procedure.setStepDecision(1)
+    procedure.setStepRemittance(1)
+    # add one attchment
+    procedure.setAttachmentTitle1('Justificatif numero 1')
+    procedure.setAttachmentRequired1(1)
+    procedure.setAttachmentModel1('PDF')
+    procedure.setAttachmentJustificative1(1)
+
+    # add security configuration
+    # define security for agent to process (assignor)
+    procedure.setInvolvedServiceGroup1('dgid/di/cge')
+    procedure.setInvolvedServiceFunction1('impots/section/chef')
+    procedure.setInvolvedServiceProcess1(0)
+    procedure.setInvolvedServiceValidate1(1)
+    procedure.setInvolvedServiceView1(0)
+    procedure.setInvolvedServiceAssociate1(0)
+    # define security for agent to just process assigned
+    # applications (Assignee)
+    procedure.setInvolvedServiceGroup2('dgid/di/cge')
+    procedure.setInvolvedServiceFunction2('impots/inspecteur')
+    procedure.setInvolvedServiceProcess2(1)
+    procedure.setInvolvedServiceValidate2(0)
+    procedure.setInvolvedServiceView2(0)
+    procedure.setInvolvedServiceAssociate2(0)
+
+    # define security for external agent to contribute
+    # in processing (Associate)
+    procedure.setInvolvedServiceGroup3('dgid/di/csf/bf')
+    procedure.setInvolvedServiceFunction3('impots/section/chef')
+    procedure.setInvolvedServiceProcess3(0)
+    procedure.setInvolvedServiceValidate3(0)
+    procedure.setInvolvedServiceView3(0)
+    procedure.setInvolvedServiceAssociate3(1)
+
+    # define security for agent to just view (auditor)
+    procedure.setInvolvedServiceGroup2('dgid/di/cge')
+    procedure.setInvolvedServiceFunction2('impots')
+    procedure.setInvolvedServiceProcess2(0)
+    procedure.setInvolvedServiceValidate2(0)
+    procedure.setInvolvedServiceView2(1)
+    procedure.setInvolvedServiceAssociate2(0)
+
+    # configure portal_type for displaying subobjects
+    scribus_file_name = 'Certificat_Residence.sla'
+    pdf_file_name = 'Certificat_Residence.pdf'
+    pdf_file_data = makeFileUpload(pdf_file_name)
+    scribus_file_data = makeFileUpload(scribus_file_name)
+    procedure.edit(default_scribus_form=scribus_file_data,
+            default_pdf_form=pdf_file_data)
+    self.tic()
+    transaction.commit()
+    self.tic()
+
+  def test_01_new_procedure_creation(self):
+    """ 
+    this test create one procedure, initialize it by some datas, validate it
+    to generate the module and portal_types and verify some properties  
+    """
+    procedure = self.createNewProcedure()
+    self.fillProcedureForm(procedure, 'vat declaration')
+    procedure.validate()
+    vat_module = self.portal.getDefaultModule('Vat Declaration')
+    self.assertEquals(vat_module.getId(), 'vat_declaration_module')
+    vat_portal_type = self.portal.portal_types.getTypeInfo('Vat Declaration')
+    self.assertEquals(vat_portal_type.getId(), 'Vat Declaration')
+    self.assertTrue(vat_portal_type.getDefaultScribusFormValue().getData()
+                                                 not in ('', None))
+    self.assertTrue(vat_portal_type.getDefaultPdfFormValue().getData()
+                                                 not in ('', None))
+    id_generator = vat_module.getIdGenerator()
+    self.assertEquals(id_generator, '_generatePerDayId')
+
+  def test_02_application_creation(self):
+    """
+    This test create a procedure: vat declaration and use it with a simple user
+    to just create a vat declaration and access it in different mode
+    """
+    procedure = self.createNewProcedure()
+    self.fillProcedureForm(procedure, 'vat declaration')
+    procedure.validate()
+    self.createCitizenUser()
+    self.logout()
+    self.login('citizen')
+    #Allow citizen to have Agent role to create application
+    vat_module = self.portal.getDefaultModule('Vat Declaration')
+    vat_declaration = vat_module.newContent(portal_type='Vat Declaration')
+    # test form generation
+    # change to EGov skin which is defined in erp5_egov
+    self.changeSkin('EGov') 
+    vat_declaration.view()
+    vat_declaration.PDFType_viewAsPdf()
+    application_dict = vat_declaration.PDFDocument_getApplicationIncomeDict()
+    self.assertEquals(len(application_dict), 1)
+    report_section_list = vat_declaration.PDFDocument_getReportSectionList()
+    self.assertEquals(len(report_section_list), 1)
+    vat_declaration.PDFDocument_viewHistory()
+
+  def test_03_submit_application(self):
+    """
+    This test create an application fill it, join required
+    attachments and submit it 
+    """
+    procedure = self.createNewProcedure()
+    self.fillProcedureForm(procedure, 'vat declaration')
+    procedure.validate()
+    self.createCitizenUser()
+    self.logout()
+    self.login('citizen')
+    #Allow citizen to have Agent role to create application
+    vat_module = self.portal.getDefaultModule('Vat Declaration')
+    vat_declaration = vat_module.newContent(portal_type='Vat Declaration')
+    # test form generation
+    # change to EGov skin which is defined in erp5_egov
+    self.changeSkin('EGov') 
+    self.assertEquals('draft', vat_declaration.getValidationState())
+    missing_file = vat_declaration.PDFDocument_getRequirementCount()
+    self.assertEquals(missing_file, 1)  
+    type_allowed_content_type_list = vat_declaration.getTypeInfo().getTypeAllowedContentTypeList()
+    type_allowed_content_type_list.append('PDF')
+    vat_declaration.getTypeInfo().setTypeAllowedContentTypeList(type_allowed_content_type_list)
+    vat_declaration.getTypeInfo().setTypeHiddenContentTypeList(type_allowed_content_type_list)
+    vat_declaration.newContent(portal_type='PDF', 
+		           title='Justificatif numero 1')
+    self.tic()
+    transaction.commit()
+    missing_file = vat_declaration.PDFDocument_getRequirementCount()
+    self.assertEquals(missing_file, 0)
+    self.portal.portal_workflow.doActionFor(vat_declaration, 'submit_draft_action')
+    self.assertEquals('submitted', vat_declaration.getValidationState())
+
+  def test_05_process_application(self):
+    """
+    This test process a submitted application and verify allowed transition
+    according to steps define in the procedure 
+    """
+    procedure = self.createNewProcedure()
+    self.fillProcedureForm(procedure, 'vat declaration')
+    procedure.validate()
+    self.createCitizenUser()
+    self.logout()
+    self.login('citizen')
+    #Allow citizen to have Agent role to create application
+    vat_module = self.portal.getDefaultModule('Vat Declaration')
+    vat_declaration = vat_module.newContent(portal_type='Vat Declaration')
+    # test form generation
+    # change to EGov skin which is defined in erp5_egov
+    self.changeSkin('EGov') 
+    self.portal.portal_workflow.doActionFor(vat_declaration, 'submit_draft_action')
+    self.assertEquals('submitted', vat_declaration.getValidationState())
+    self.createValidatorUser()
+    self.logout()
+    self.login('major')
+    vat_declaration.view()
+    vat_declaration.PDFDocument_getApplicationIncomeDict()
+    vat_declaration.PDFDocument_getReportSectionList()
+    vat_declaration.PDFDocument_viewHistory()
+    self.portal.portal_workflow.doActionFor(vat_declaration, 'accept_action')
+    self.assertEquals('accepted', vat_declaration.getValidationState())
+    self.assertEquals(vat_declaration.getTypeInfo().getStepReviewRequest(),None)
+    self.portal.portal_workflow.doActionFor(vat_declaration, 'assign_action')
+    self.assertEquals('assigned', vat_declaration.getValidationState())
+    self.portal.portal_workflow.doActionFor(vat_declaration, 'complet_action')
+    self.assertEquals('completed', vat_declaration.getValidationState())
+
+
 def test_suite():
   suite = unittest.TestSuite()
-  suite.addTest(unittest.makeSuite(TestERP5eGov))
+  suite.addTest(unittest.makeSuite(TestEgov))
   return suite
- 
+




More information about the Erp5-report mailing list