# -*- coding: utf-8 -*- # # File: testTeleServicesTool.py # # Copyright (c) 2007 by CommunesPlone # Generator: ArchGenXML Version 1.5.1-svn # http://plone.org/products/archgenxml # # GNU General Public License (GPL) # # 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., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # __author__ = """Gauthier BASTIEN , Stephan GEULETTE """ __docformat__ = 'plaintext' import os, sys if __name__ == '__main__': execfile(os.path.join(sys.path[0], 'framework.py')) ##code-section module-header #fill in your manual code here from AccessControl import Unauthorized from Products.CMFCore.utils import getToolByName from Products.TeleServices.config import * from Products.TeleServices.tests.BaseTeleServicesTestCase import BaseTeleServicesTestCase from Products.validation import validation from sets import Set ##/code-section module-header # # Test-cases for class(es) # from Testing import ZopeTestCase # Import the tested classes ##code-section module-beforeclass #fill in your manual code here ##/code-section module-beforeclass class testTeleServicesTool(BaseTeleServicesTestCase): """Test-cases for class(es) .""" ##code-section class-header_testTeleServicesTool #fill in your manual code here ##/code-section class-header_testTeleServicesTool def afterSetUp(self): """ """ BaseTeleServicesTestCase.afterSetup(self) # Manually created methods def testIsValidAccount(self): """ we test the validator isValidAccount """ v = validation.validatorFor('isValidAccount') # None is returned when validation is ok self.failUnlessEqual(v('000-0000-0000'), '12 numbers are needed.') self.failUnlessEqual(v('000-0000-000000'), '12 numbers are needed.') self.failUnlessEqual(v('FR54 0000 0000 0097'), 'IBAN must begin by BE or be') #rest = 0 -> 97 ok self.failUnlessEqual(v('107777776797'), None) self.failUnlessEqual(v('BE54 0000 0000 0097'), None) self.failUnlessEqual(v('be54000000000097'), None) #rest = 0 -> 95 nok self.failUnlessEqual(v('107777776795'), 'Number not valid.') self.failUnlessEqual(v('BE22 1564 8795 3165'), 'Number not valid.') #rest = 1 -> ok self.failUnlessEqual(v('107777776801'), None) self.failUnlessEqual(v('BE22 ,+4 8795 3165'), 'Number not valid.') #rest = 1 -> nok self.failUnlessEqual(v('107777776702'), 'Number not valid.') def testIsTeleServicesManager(self): """" If the connected user has the "TeleServicesManager" role somewhere in the folder where are in, he has someting to manage so, we show him the administration interface The context is the folder where he is """ tst = self.portal.portal_teleservices self.login('member') home_folder = self.portal.portal_membership.getHomeFolder() self.failIf(tst.isTeleServicesManager(home_folder)) self.login('ptsmanager') home_folder = self.portal.portal_membership.getHomeFolder() self.failUnless(tst.isTeleServicesManager(home_folder)) self.login('wtsmanager') home_folder = self.portal.portal_membership.getHomeFolder() self.failUnless(tst.isTeleServicesManager(home_folder)) self.login('admin') home_folder = self.portal.portal_membership.getHomeFolder() self.failUnless(tst.isTeleServicesManager(home_folder)) def testGetTermObject(self): """ get a term object from a className and a term type """ self.assertEquals(self.portal.portal_teleservices.getTermObject('PopulationTeleService', 'MotivationTerm', 'motivterm1') , self.portal.portal_teleservices.populationteleservice_config.motivationterms.motivterm1) self.assertEquals(self.portal.portal_teleservices.getTermObject('PopulationTeleService', 'DestinationTerm', 'destterm1') , self.portal.portal_teleservices.populationteleservice_config.destinationterms.destterm1) self.assertEquals(self.portal.portal_teleservices.getTermObject('PopulationTeleService', 'DemandTypeTerm', 'ptsterm1') , self.portal.portal_teleservices.populationteleservice_config.demandtypeterms.ptsterm1) self.assertEquals(self.portal.portal_teleservices.getTermObject('WorkTeleService', 'DemandTypeTerm', 'wtsterm1') , self.portal.portal_teleservices.workteleservice_config.demandtypeterms.wtsterm1) def testGetDemandTypeFromRequest(self): """ This will return the demand_type parameter that could be passed as parameter to createObject """ ####################################################### def testGetDemandFolder(self): """ This will check the existence of the demands folder (create it if not) and return the path """ self.login('member') #demand folder already exists self.assertEquals(self.portal.portal_teleservices.getDemandFolder(), 'http://nohost/plone/Members/member/'+ROOT_FOLDER_NAME) #deleting demand folder self.portal.Members.member.manage_delObjects(ROOT_FOLDER_NAME) self.assertRaises(AttributeError, getattr, self.portal.Members.member, ROOT_FOLDER_NAME) self.assertEquals(self.portal.portal_teleservices.getDemandFolder(), 'http://nohost/plone/Members/member/'+ROOT_FOLDER_NAME) #deleting member home folder self.portal.Members.manage_delObjects('member') self.assertEquals(self.portal.portal_teleservices.getDemandFolder(), '') def testCreateTeleservicesFolder(self): """ creates the demand folder """ self.login('member') #deleting demand folder self.portal.Members.member.manage_delObjects(ROOT_FOLDER_NAME) self.assertRaises(AttributeError, getattr, self.portal.Members.member, ROOT_FOLDER_NAME) self.portal.portal_teleservices.createTeleservicesFolder() self.failUnless(hasattr(self.portal.Members.member, ROOT_FOLDER_NAME)) dtf = getattr(self.portal.Members.member, ROOT_FOLDER_NAME) #testing "properties" ... self.assertEquals(dtf.getConstrainTypesMode(), 1) # self.assertEquals(Set(dtf.getLocallyAllowedTypes()), Set(['PopulationTeleService', 'WorkTeleService', 'BelDonorTeleService'])) self.assertEquals(Set(dtf.getLocallyAllowedTypes()), Set(['PopulationTeleService', 'WorkTeleService'])) # self.assertEquals(Set(dtf.getImmediatelyAddableTypes()), Set(['PopulationTeleService', 'WorkTeleService', 'BelDonorTeleService'])) self.assertEquals(Set(dtf.getImmediatelyAddableTypes()), Set(['PopulationTeleService', 'WorkTeleService'])) self.assertEquals(dtf.getLayout(), 'myteleservices_view') self.failUnless(dtf.hasProperty('left_slots')) self.assertEquals(dtf.left_slots, ()) #testing permissions : only manager and owner have the permissions to add ts #member can add a ts in the demand folder pts = self.invokeFactoryTS(type_name='PopulationTeleService', demand_type='ptsterm1', id='pts', path=dtf) pts = self.invokeFactoryTS(type_name='WorkTeleService', demand_type='wtsterm1', id='wts', path=dtf) self.assertRaises(Unauthorized, dtf.invokeFactory, type_name='Document', id='doc') #member2 cannot add a ts in the demand folder self.login('member2') self.assertRaises(Unauthorized, self.invokeFactoryTS, type_name='PopulationTeleService', demand_type='ptsterm1', id='pts1', path=dtf) self.assertRaises(Unauthorized, self.invokeFactoryTS, type_name='WorkTeleService', demand_type='wtsterm1', id='wts1', path=dtf) self.assertRaises(Unauthorized, dtf.invokeFactory, type_name='Document', id='doc1') #admin can add a ts in the demand folder self.login('admin') pts = self.invokeFactoryTS(type_name='PopulationTeleService', demand_type='ptsterm1', id='pts2', path=dtf) pts = self.invokeFactoryTS(type_name='WorkTeleService', demand_type='wtsterm1', id='wts2', path=dtf) self.assertRaises(Unauthorized, dtf.invokeFactory, type_name='Document', id='doc2') def testListTermObjects(self): """ return a list of term objects corresponding to termname and classname """ tstool = self.portal.portal_teleservices dttp = tstool.populationteleservice_config.demandtypeterms mtp = tstool.populationteleservice_config.motivationterms dtp = tstool.populationteleservice_config.destinationterms dttw = tstool.workteleservice_config.demandtypeterms #all of pop demandtypes self.assertEquals(Set(tstool.listTermObjects('PopulationTeleService', 'DemandTypeTerm', onStates = [])) ,Set([dttp.ptsterm1, dttp.ptsterm2, dttp.ptsterm3, dttp.ptsterm4])) #info_only, on_line self.assertEquals(Set(tstool.listTermObjects('PopulationTeleService', 'DemandTypeTerm', onStates = ['info_only', 'on_line'])) ,Set([dttp.ptsterm1, dttp.ptsterm2, dttp.ptsterm3])) #disabled self.assertEquals(Set(tstool.listTermObjects('PopulationTeleService', 'DemandTypeTerm', onStates = ['disabled'])) ,Set([dttp.ptsterm4])) #info_only self.assertEquals(Set(tstool.listTermObjects('PopulationTeleService', 'DemandTypeTerm', onStates = ['info_only'])) ,Set([dttp.ptsterm2])) #on_line self.assertEquals(Set(tstool.listTermObjects('PopulationTeleService', 'DemandTypeTerm', onStates = ['on_line'])) ,Set([dttp.ptsterm1, dttp.ptsterm3,])) #all of pop motiv self.assertEquals(Set(tstool.listTermObjects('PopulationTeleService', 'MotivationTerm', onStates = [])) ,Set([mtp.motivterm1, mtp.motivterm2, mtp.motivterm3, mtp.motivterm4])) #enabled, disabled self.assertEquals(Set(tstool.listTermObjects('PopulationTeleService', 'MotivationTerm', onStates = ['disabled', 'enabled'])) ,Set([mtp.motivterm1, mtp.motivterm2, mtp.motivterm3, mtp.motivterm4])) #enabled self.assertEquals(Set(tstool.listTermObjects('PopulationTeleService', 'MotivationTerm', onStates = ['enabled'])) ,Set([mtp.motivterm1, mtp.motivterm2, mtp.motivterm4])) #disabled self.assertEquals(Set(tstool.listTermObjects('PopulationTeleService', 'MotivationTerm', onStates = ['disabled'])) ,Set([mtp.motivterm3])) #all of pop dest self.assertEquals(Set(tstool.listTermObjects('PopulationTeleService', 'DestinationTerm', onStates = [])) ,Set([dtp.destterm1, dtp.destterm2, dtp.destterm3])) #enabled, disabled self.assertEquals(Set(tstool.listTermObjects('PopulationTeleService', 'DestinationTerm', onStates = ['disabled', 'enabled'])) ,Set([dtp.destterm1, dtp.destterm2, dtp.destterm3])) #disabled self.assertEquals(Set(tstool.listTermObjects('PopulationTeleService', 'DestinationTerm', onStates = ['disabled'])) ,Set([dtp.destterm3])) #enabled self.assertEquals(Set(tstool.listTermObjects('PopulationTeleService', 'DestinationTerm', onStates = ['enabled'])) ,Set([dtp.destterm1, dtp.destterm2])) #all of work demandtype self.assertEquals(Set(tstool.listTermObjects('WorkTeleService', 'DemandTypeTerm', onStates = [])) ,Set([dttw.wtsterm1, dttw.wtsterm2, dttw.wtsterm3])) #info_only, on_line self.assertEquals(Set(tstool.listTermObjects('WorkTeleService', 'DemandTypeTerm', onStates = ['info_only', 'on_line'])) ,Set([dttw.wtsterm1, dttw.wtsterm2])) #disabled self.assertEquals(Set(tstool.listTermObjects('WorkTeleService', 'DemandTypeTerm', onStates = ['disabled'])) ,Set([dttw.wtsterm3])) #info_only self.assertEquals(Set(tstool.listTermObjects('WorkTeleService', 'DemandTypeTerm', onStates = ['info_only'])) ,Set([])) #on_line self.assertEquals(Set(tstool.listTermObjects('WorkTeleService', 'DemandTypeTerm', onStates = ['on_line'])) ,Set([dttw.wtsterm1, dttw.wtsterm2])) def testListTermsVocab(self): """ return a DisplayList of term ids corresponding to termname and classname """ tstool = self.portal.portal_teleservices #all of pop demandtypes self.assertEquals(Set(tstool.listTermsVocab('PopulationTeleService', 'DemandTypeTerm', onStates = [])) ,Set(['ptsterm1', 'ptsterm2', 'ptsterm3', 'ptsterm4'])) #all of pop motiv self.assertEquals(Set(tstool.listTermsVocab('PopulationTeleService', 'MotivationTerm', onStates = [])) ,Set(['motivterm1', 'motivterm2', 'motivterm3', 'motivterm4'])) #all of pop dest self.assertEquals(Set(tstool.listTermsVocab('PopulationTeleService', 'DestinationTerm', onStates = [])) ,Set(['destterm1', 'destterm2', 'destterm3'])) #all of work demandtype self.assertEquals(Set(tstool.listTermsVocab('WorkTeleService', 'DemandTypeTerm', onStates = [])) ,Set(['wtsterm1', 'wtsterm2', 'wtsterm3'])) def testListRefVocab(self): """ return a vocabulary for an object having a reference field attribute (refFieldName). The vocab contains id/title of the referenced objects We filter on workflow states if state values in onStates list """ tstool = self.portal.portal_teleservices dttp = tstool.populationteleservice_config.demandtypeterms res = ['motivterm1', 'motivterm2'] if ADD_EMPTY_VOCAB_VALUE: res.append('') self.assertEquals(Set(tstool.listRefVocab(dttp.ptsterm1, 'motivationTerms', ['enabled'])), Set(res)) #no motivationterms self.assertEquals(Set(tstool.listRefVocab(dttp.ptsterm2, 'motivationTerms', ['enabled'])), Set([DEFAULT_VOCAB_VALUE])) def testListDemandContentTypes(self): """ return the list of types of our product that will be addable by a common user """ tstool = self.portal.portal_teleservices # self.assertEquals(Set(tstool.listDemandContentTypes()), Set(['PopulationTeleService', 'WorkTeleService', 'BelDonorTeleService'])) self.assertEquals(Set(tstool.listDemandContentTypes()), Set(['PopulationTeleService', 'WorkTeleService'])) def testCheckTSMemberRole(self): """ test if the member is manager for the TS type """ tstool = self.portal.portal_teleservices pms = self.portal.portal_membership self.login('member') user = pms.getAuthenticatedMember() self.failIf(tstool.checkTSMemberRole('PopulationTeleService', user)) self.login('admin') user = pms.getAuthenticatedMember() self.failUnless(tstool.checkTSMemberRole('PopulationTeleService', user)) self.failUnless(tstool.checkTSMemberRole('WorkTeleService', user)) self.login('ptsmanager') user = pms.getAuthenticatedMember() self.failUnless(tstool.checkTSMemberRole('PopulationTeleService', user)) self.failIf(tstool.checkTSMemberRole('WorkTeleService', user)) self.login('wtsmanager') user = pms.getAuthenticatedMember() self.failUnless(tstool.checkTSMemberRole('WorkTeleService', user)) self.failIf(tstool.checkTSMemberRole('PopulationTeleService', user)) def testGenerateStructuredCommunication(self): """ generate the structuredcommunication field of PopulationTeleService """ tstool = self.portal.portal_teleservices self.assertEquals(tstool.generateStructuredCommunication('PopulationTeleService', 'demandTypeTerm', 'ptsterm1') , '100/0000/00135') self.assertEquals(tstool.generateStructuredCommunication('PopulationTeleService', 'demandTypeTerm', 'ptsterm3') , '100/0000/00236') count = tstool.getCounters() count['1'] = 62 self.assertEquals(tstool.generateStructuredCommunication('PopulationTeleService', 'demandTypeTerm', 'ptsterm2') , '100/0000/06397') self.assertEquals(tstool.generateStructuredCommunication('PopulationTeleService', 'demandTypeTerm', 'ptsterm1') , '100/0000/06401') def testGetEnabledTypes(self): """ return a list of globally allowed project class names """ tstool = self.portal.portal_teleservices # self.assertEquals(Set(tstool.getEnabledTypes()), Set(['PopulationTeleService', 'WorkTeleService', 'BelDonorTeleService'])) self.assertEquals(Set(tstool.getEnabledTypes()), Set(['PopulationTeleService', 'WorkTeleService'])) self.portal.portal_types.PopulationTeleService.manage_changeProperties(global_allow=False) # self.assertEquals(Set(tstool.getEnabledTypes()), Set(['WorkTeleService', 'BelDonorTeleService'])) self.assertEquals(Set(tstool.getEnabledTypes()), Set(['WorkTeleService'])) def testSetEnabledTypes(self): """ set globally allowed project class names """ tstool = self.portal.portal_teleservices pt = self.portal.portal_types self.failUnless(pt.WorkTeleService.global_allow) self.failUnless(pt.PopulationTeleService.global_allow) tstool.setEnabledTypes(['WorkTeleService']) self.failUnless(pt.WorkTeleService.global_allow) self.failIf(pt.PopulationTeleService.global_allow) def testGetCounters(self): """ create (if not exist) and return a new persistent property """ tstool = self.portal.portal_teleservices count = tstool.getCounters() self.failUnless(count) self.failUnless(count.has_key('1')) def testListAvailablePaymentModes(self): """ return all availables payment modes defined in config.py PAYMENT_MODES """ tstool = self.portal.portal_teleservices self.assertEquals(Set(tstool.listAvailablePaymentModes()), Set(['bank_transfer'])) def testGetDefaultNoValue(self): """ return the default no value """ tstool = self.portal.portal_teleservices self.assertEquals(tstool.getDefaultNoValue(), DEFAULT_NO_VALUE) def testGetEnabledPaymentModesAsDisplayList(self): """ return every enabled payment modes as a display list so we can retrieve the key and the translation of the key """ tstool = self.portal.portal_teleservices self.assertEquals(Set(tstool.getEnabledPaymentModesAsDisplayList()), Set(['_no_value_'])) tstool.setEnabledPaymentModes(['bank_transfer']) self.assertEquals(Set(tstool.getEnabledPaymentModesAsDisplayList()), Set(['bank_transfer'])) def testGetEnabledTypesObjects(self): """ return a list of globally allowed project class objects """ tstool = self.portal.portal_teleservices pt = self.portal.portal_types # self.assertEquals(Set(tstool.getEnabledTypesObjects()), Set([pt.PopulationTeleService, pt.WorkTeleService, pt.BelDonorTeleService])) self.assertEquals(Set(tstool.getEnabledTypesObjects()), Set([pt.PopulationTeleService, pt.WorkTeleService])) tstool.setEnabledTypes(['WorkTeleService']) self.assertEquals(Set(tstool.getEnabledTypesObjects()), Set([pt.WorkTeleService])) def testCheckIfEidRequired(self): """ check if there is demands with eid required for a ts type """ tstool = self.portal.portal_teleservices self.failUnless(tstool.checkIfEidRequired('PopulationTeleService', ['on_line', 'info_only'])) for obj in tstool.listTermObjects('PopulationTeleService', 'DemandTypeTerm', ['on_line', 'info_only']): if obj.getEidRequired(): obj.setEidRequired(False) self.failIf(tstool.checkIfEidRequired('PopulationTeleService', ['on_line', 'info_only'])) def testCheckIfDestinationTerms(self): """ check if there is demands with destinationterms for a ts type. we return : - False if no demand has destinationTerms - True if there are demands with destinationTerms """ tstool = self.portal.portal_teleservices self.failUnless(tstool.checkIfDestinationTerms('PopulationTeleService', ['on_line', 'info_only'])) for obj in tstool.listTermObjects('PopulationTeleService', 'DemandTypeTerm', ['on_line', 'info_only']): if obj.getDestinationTerms(): obj.setDestinationTerms([]) self.failIf(tstool.checkIfDestinationTerms('PopulationTeleService', ['on_line', 'info_only'])) def test_suite(): from unittest import TestSuite, makeSuite suite = TestSuite() suite.addTest(makeSuite(testTeleServicesTool)) return suite ##code-section module-footer #fill in your manual code here ##/code-section module-footer if __name__ == '__main__': framework()