[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