diff --git a/product/ERP5/tests/testBusinessTemplate.py b/product/ERP5/tests/testBusinessTemplate.py index 585cf0adc9b8c6dac0230795cfac11e8d7f6072f..7212a4571455a7b526bb887849241ebb86f7c36e 100644 --- a/product/ERP5/tests/testBusinessTemplate.py +++ b/product/ERP5/tests/testBusinessTemplate.py @@ -57,27 +57,11 @@ from Products.PortalTransforms.Transform import Transform Transform_tr_init = Transform._tr_init Transform_manage_beforeDelete = Transform.manage_beforeDelete -class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): - """ - Test these operations: - - - Create a template - - - Install a template - - - Uninstall a template - - - Upgrade a template - """ - +class BusinessTemplateMixin(ERP5TypeTestCase, LogInterceptor): def getBusinessTemplateList(self): return ('erp5_base', 'erp5_csv_style', ) - - def getTitle(self): - return "Business Template" - ## Ignore errors from PortalTransforms (e.g. missing binaries) def _catch_log_errors(self): @@ -2890,197 +2874,759 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): description='bt for unit_test') sequence.edit(dependency_bt=template) - # tests - def test_Title(self): - """Tests the Title of the Template Tool.""" - self.assertEquals('Template Tool', self.getTemplateTool().Title()) + def stepSetSkinFolderRegistredSelections(self, sequence=None, **kw): + ps = self.getSkinsTool() + skin_id = sequence.get('skin_folder_id') + skin_folder = ps._getOb(skin_id, None) + skin_folder._setProperty( + 'business_template_registered_skin_selections', ('Foo',), + type='tokens') - def test_01_checkNewSite(self): - """Test Check New Site""" - sequence_list = SequenceList() - sequence_string = '\ - UseCoreBusinessTemplate \ - CheckTools \ - CheckBuiltBuildingState \ - CheckInstalledInstallationState \ - CheckSkinsLayers \ - ' - sequence_list.addSequenceString(sequence_string) - sequence_list.play(self) + def stepSetSkinFolderRegistredSelections2(self, sequence=None, **kw): + ps = self.getSkinsTool() + skin_id = sequence.get('skin_folder_id') + skin_folder = ps._getOb(skin_id, None) + skin_folder._updateProperty( + 'business_template_registered_skin_selections', ('Foo', 'Bar',)) - # test of portal types - def test_02_BusinessTemplateWithPortalTypes(self): - """Test Business Template With Portal Types""" - sequence_list = SequenceList() - sequence_string = '\ - CreatePortalType \ - CreateNewBusinessTemplate \ - UseExportBusinessTemplate \ - AddPortalTypeToBusinessTemplate \ - FillPortalTypesFields \ - CheckModifiedBuildingState \ - CheckNotInstalledInstallationState \ - BuildBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - CheckObjectPropertiesInBusinessTemplate \ - SaveBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - RemovePortalType \ - RemoveBusinessTemplate \ - RemoveAllTrashBins \ - ImportBusinessTemplate \ - UseImportBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - InstallBusinessTemplate \ - Tic \ - CheckInstalledInstallationState \ - CheckBuiltBuildingState \ - CheckNoTrashBin \ - CheckSkinsLayers \ - CheckPortalTypeExists \ - CreateSecondBusinessTemplate \ - UseSecondBusinessTemplate \ - AddPortalTypeToBusinessTemplate \ - FillPortalTypesFields \ - ModifyPortalTypeInBusinessTemplate \ - CheckModifiedBuildingState \ - CheckNotInstalledInstallationState \ - BuildBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - CheckObjectPropertiesInBusinessTemplate \ - SaveBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - RemoveBusinessTemplate \ - RemoveAllTrashBins \ - ImportBusinessTemplate \ - UseImportBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - InstallBusinessTemplate \ - Tic \ - CheckInstalledInstallationState \ - CheckBuiltBuildingState \ - CheckSkinsLayers \ - CheckPortalTypeExists \ - UninstallBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - CheckPortalTypeRemoved \ - ' - sequence_list.addSequenceString(sequence_string) - sequence_list.play(self) + def stepCreateSkinSelection(self, sequence=None, **kw): + ps = self.getSkinsTool() + ps.manage_skinLayers(skinpath=('erp5_core',), skinname='Foo', add_skin=1) - def test_021_BusinessTemplateWithPortalTypesAndWrongValues(self): - """Test Business Template With Portal Types and Bad Values""" - sequence_list = SequenceList() - sequence_string = '\ - CreatePortalType \ - CreateNewBusinessTemplate \ - UseExportBusinessTemplate \ - AddPortalTypeToBusinessTemplate \ - FillPortalTypesFields \ - FillWrongPortalTypesFields \ - CheckModifiedBuildingState \ - CheckNotInstalledInstallationState \ - CheckBuildWithBadPortalTypeFailed \ - RemovePortalType \ - RemoveBusinessTemplate \ - RemoveAllTrashBins \ - ' - sequence_list.addSequenceString(sequence_string) - sequence_list.play(self) + def stepSetStaticSkinFolderRegistredSelections(self, sequence=None, **kw): + ps = self.getSkinsTool() + skin_id = sequence.get('static_skin_folder_id') + skin_folder = ps._getOb(skin_id, None) + skin_folder._setProperty( + 'business_template_registered_skin_selections', ('Foo',), + type='tokens') + selection = ps.getSkinPath('Foo') + selection = selection.split(',') + if skin_id not in selection: + selection.append(skin_id) + ps.manage_skinLayers(skinpath=tuple(selection), + skinname='Foo', add_skin=1) - # test of skins - def test_03_BusinessTemplateWithSkins(self): - """Test Business Template With Skin Folder""" - sequence_list = SequenceList() - sequence_string = '\ - CreateSkinFolder \ - CreateNewBusinessTemplate \ - UseExportBusinessTemplate \ - AddSkinFolderToBusinessTemplate \ - CheckModifiedBuildingState \ - CheckNotInstalledInstallationState \ - BuildBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - CheckObjectPropertiesInBusinessTemplate \ - SaveBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - RemoveSkinFolder \ - RemoveBusinessTemplate \ - RemoveAllTrashBins \ - ImportBusinessTemplate \ - UseImportBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - InstallBusinessTemplate \ - Tic \ - CheckInstalledInstallationState \ - CheckBuiltBuildingState \ - CheckNoTrashBin \ - CheckSkinsLayers \ - CheckSkinFolderExists \ - UninstallBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - CheckSkinFolderRemoved \ - ' - sequence_list.addSequenceString(sequence_string) - sequence_list.play(self) + def stepCheckSkinSelectionAdded(self, sequence=None, **kw): + ps = self.getSkinsTool() + skin_id = sequence.get('skin_folder_id') + # a new skin selection is added + self.assertTrue('Foo' in ps.getSkinSelections()) + # and it contains good layers + layers = ps.getSkinPath('Foo').split(',') + self.assertTrue(skin_id in layers, layers) + self.assertTrue('erp5_core' in layers, layers) + self.assertFalse('erp5_xhtml_style' in layers, layers) + skin_folder = ps._getOb(skin_id, None) + skin_selection_list = skin_folder.getProperty( + 'business_template_registered_skin_selections', ()) + self.assertTrue('Foo' in skin_selection_list) - # test of workflow - def test_04_BusinessTemplateWithWorkflow(self): - """Test Business Template With Workflow""" - sequence_list = SequenceList() - sequence_string = '\ - CreatePortalType \ - CreateWorkflow \ - CreateNewBusinessTemplate \ - UseExportBusinessTemplate \ - AddWorkflowToBusinessTemplate \ - AddWorkflowChainToBusinessTemplate \ - CheckModifiedBuildingState \ - CheckNotInstalledInstallationState \ - BuildBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - CheckObjectPropertiesInBusinessTemplate \ - SaveBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - RemoveWorkflow \ - RemoveBusinessTemplate \ - RemoveAllTrashBins \ - ImportBusinessTemplate \ - UseImportBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - InstallBusinessTemplate \ - Tic \ - CheckInstalledInstallationState \ - CheckBuiltBuildingState \ - CheckNoTrashBin \ - CheckSkinsLayers \ - CheckWorkflowExists \ - UninstallBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - CheckWorkflowRemoved \ - ' - sequence_list.addSequenceString(sequence_string) - sequence_list.play(self) + def stepCheckStaticSkinSelection(self, sequence=None, **kw): + ps = self.getSkinsTool() + skin_id = sequence.get('skin_folder_id') + static_skin_id = sequence.get('static_skin_folder_id') + # a new skin selection is added + self.assertTrue('Foo' in ps.getSkinSelections()) + # and it contains good layers + layers = ps.getSkinPath('Foo').split(',') + self.assertTrue(skin_id in layers, layers) + self.assertTrue('erp5_core' in layers, layers) + self.assertFalse('erp5_xhtml_style' in layers, layers) + self.assertTrue(static_skin_id in layers, layers) - def test_041_BusinessTemplateWithWorkflowRemoved(self): - """Test Business Template With Remove Of Workflow""" - sequence_list = SequenceList() - sequence_string = '\ + def stepCreateCustomWorkflow(self, sequence=None, **kw): + """ + Create a custom workflow + """ + wf_id = 'custom_geek_workflow' + pw = self.getWorkflowTool() + addWorkflowByType(pw, WORKFLOW_TYPE, wf_id) + workflow = pw._getOb(wf_id, None) + self.failUnless(workflow is not None) + sequence.edit(workflow_id=workflow.getId()) + cbt = pw._chains_by_type + props = {} + if cbt is not None: + for id, wf_ids in cbt.items(): + props['chain_%s' % id] = ','.join(wf_ids) + key = 'chain_Geek Object' + if props.has_key(key): + props[key] = '%s,%s' % (props[key], wf_id) + else: + props[key] = wf_id + pw.manage_changeWorkflows('', props=props) + + def stepCreateCustomBusinessTemplate(self, sequence=None, **kw): + """ + Create a custom Business Template + """ + pt = self.getTemplateTool() + template = pt.newContent(portal_type='Business Template') + self.failUnless(template.getBuildingState() == 'draft') + self.failUnless(template.getInstallationState() == 'not_installed') + template.edit(title='custom geek template', + version='1.0', + description='custom bt for unit_test') + sequence.edit(export_bt=template) + + def stepCheckCustomWorkflowChain(self, sequence=None, **kw): + """ + Check custom workflow chain + """ + present = 0 + pw = self.getWorkflowTool() + cbt = pw._chains_by_type + if cbt is not None: + for id, wf_ids in cbt.items(): + if id == "Geek Object": + present = 1 + self.assertEqual(present, 1) + self.assertSameSet(cbt['Geek Object'], + ('geek_workflow', 'custom_geek_workflow')) + + def stepCheckOriginalWorkflowChain(self, sequence=None, **kw): + """ + Check original workflow chain + """ + present = 0 + pw = self.getWorkflowTool() + cbt = pw._chains_by_type + if cbt is not None: + for id, wf_ids in cbt.items(): + if id == "Geek Object": + present = 1 + self.assertEqual(present, 1) + self.assertSameSet(cbt['Geek Object'], + ('geek_workflow', )) + + def stepCheckEmptyWorkflowChain(self, sequence=None, **kw): + """ + Check that workflow chain is empty + """ + present = 0 + pw = self.getWorkflowTool() + cbt = pw._chains_by_type + if cbt is not None: + for id, wf_ids in cbt.items(): + if id == "Geek Object": + present = 1 + break + if present: + self.assertEqual(0, len(wf_ids)) + + def stepCopyBusinessTemplate(self, sequence=None, **kw): + """ + Copy business template + """ + portal = self.getPortalObject() + template_tool = portal.portal_templates + import_bt = sequence.get('current_bt') + cb_data = template_tool.manage_copyObjects([import_bt.getId()]) + copied, = template_tool.manage_pasteObjects(cb_data) + sequence.edit(current_bt=template_tool._getOb(copied['new_id'])) + + def stepRemoveWorkflowFromBusinessTemplate(self, sequence=None, **kw): + """ + Remove workflow to business template + """ + bt = sequence.get('current_bt', None) + self.failUnless(bt is not None) + current_twi = list(bt.getTemplateWorkflowIdList()) + current_twi.remove(sequence.get('workflow_id', '')) + bt.edit(template_workflow_id_list=current_twi) + + def stepRemoveWorkflowChainFromBusinessTemplate(self, sequence=None, **kw): + """ + Remove workflow chain to business template + """ + bt = sequence.get('current_bt', None) + self.failUnless(bt is not None) + workflow_id = sequence.get('workflow_id', '') + new_value = [] + workflow_chain_list = list(bt.getTemplatePortalTypeWorkflowChainList()) + for workflow_chain in workflow_chain_list: + portal_type, wkflow_id = workflow_chain.split(' | ') + if wkflow_id != workflow_id: + new_value.append(workflow_chain) + bt.edit(template_portal_type_workflow_chain_list=new_value) + + def stepCreatePortalTypeRole(self, sequence=None, **kw): + """ + Create portal type role + """ + pt = self.getTypeTool() + object_id = sequence.get('object_ptype_id') + object_pt = pt._getOb(object_id) + object_pt.newContent(portal_type='Role Information', + title='Geek Role Definition', + description='A definition with non ascii chars éà è', + role_name_list=('geek_role_definition',), + role_category_list=('group/g1','function/f1'), + role_base_category_script_id='Base Category Script', + role_base_category_list=('group','site')) + + sequence.edit(portal_type_role='geek_role_definition') + + def stepAddPortalTypeRolesToBusinessTemplate(self, sequence=None, **kw): + """ + Add type role to business template + """ + bt = sequence.get('current_bt', None) + self.failUnless(bt is not None) + ptype_ids = [] + ptype_ids.append(sequence.get('object_ptype_id', '')) + ptype_ids.append(sequence.get('module_ptype_id', '')) + self.assertEqual(len(ptype_ids), 2) + bt.edit(template_portal_type_roles_list=ptype_ids) + + def stepCheckPortalTypeRoleExists(self, sequence=None, **kw): + """ + Cehck that portal type role exist + """ + pt = self.getTypeTool() + object_id = sequence.get('object_ptype_id') + role, = pt[object_id].getRoleInformationList() + self.assertEqual('Geek Role Definition', role.getTitle()) + self.assertEqual(['geek_role_definition'], role.getRoleNameList()) + self.assertEqual('A definition with non ascii chars éà è', role.getDescription()) + self.assertEqual(['group/g1','function/f1'], role.getRoleCategoryList()) + self.assertEqual(['group','site'], role.getRoleBaseCategoryList()) + self.assertEqual('Base Category Script', role.getRoleBaseCategoryScriptId()) + + def stepModifyPortalType(self, sequence=None, **kw): + """ + Modify Portal Type + """ + pt = self.getTypeTool() + object_type = pt._getOb('Geek Object', None) + object_type.title = 'Modified %s' % object_type.title + + def stepUnmodifyPortalType(self, sequence=None, **kw): + """ + Unmodify Portal Type + """ + pt = self.getTypeTool() + object_type = pt._getOb('Geek Object', None) + object_type.title = object_type.title[len('Modified '):] + + def stepCheckModifiedPortalTypeExists(self, sequence=None, **kw): + """ + Check presence of modified portal type + """ + self.stepCheckPortalTypeExists(sequence=sequence, **kw) + pt = self.getTypeTool() + object_id = sequence.get('object_ptype_id') + object_type = pt._getOb(object_id, None) + self.failUnless(object_type.title.startswith('Modified ')) + + def stepCreateFakeZODBScript(self, sequence=None, **kw): + """Create a Script inside portal_skins + """ + grain_of_sand = ''.join([random.choice(string.ascii_letters) for i in xrange(10)]) + python_script_id = 'ERP5Site_dummyScriptWhichRandomId%s' % grain_of_sand + skin_folder_id = 'custom' + if getattr(self.portal.portal_skins, skin_folder_id, None) is None: + self.portal.portal_skins.manage_addProduct['OFSP'].manage_addFolder(skin_folder_id) + skin_folder = self.portal.portal_skins[skin_folder_id] + skin_folder.manage_addProduct['PythonScripts'].manage_addPythonScript( + id=python_script_id) + sequence.set('python_script_id', python_script_id) + sequence.set('skin_folder_id', skin_folder_id) + + def stepAddCustomSkinFolderToBusinessTemplate(self, sequence=None, **kw): + """ + Add types to business template + """ + bt = sequence.get('current_bt', None) + self.failUnless(bt is not None) + template_skin_id_list = list(bt.getProperty('template_skin_id_list')) + template_skin_id_list.append('custom') + bt.edit(template_skin_id_list=template_skin_id_list) + + def stepCheckFakeScriptIsDeleted(self, sequence=None, **kw): + """Check that script inside ZODB is deleted by BT reinstallation + """ + python_script_id = sequence.get('python_script_id') + skin_folder_id = sequence.get('skin_folder_id') + folder = self.portal.portal_skins[skin_folder_id] + self.assertTrue(python_script_id not in folder.objectIds()) + + def stepSetOldSitePropertyValue(self, sequence=None, **kw): + """Set the old value to a site property.""" + sequence.set('site_property_value', 'old') + + def stepSetNewSitePropertyValue(self, sequence=None, **kw): + """Set the new value to a site property.""" + sequence.set('site_property_value', 'new') + + def stepCreateSiteProperty(self, sequence=None, **kw): + """Create a site property.""" + portal = self.getPortal() + portal._setProperty('a_property', sequence.get('site_property_value')) + + def stepModifySiteProperty(self, sequence=None, **kw): + """Modify a site property.""" + portal = self.getPortal() + portal._updateProperty('a_property', sequence.get('site_property_value')) + + def stepCheckSiteProperty(self, sequence=None, **kw): + """Check a site property.""" + portal = self.getPortal() + self.assertEquals(portal.getProperty('a_property'), + sequence.get('site_property_value')) + + def stepCheckSitePropertyRemoved(self, sequence=None, **kw): + """Check if a site property is removed.""" + portal = self.getPortal() + self.failIf(portal.hasProperty('a_property')) + + def stepAddSitePropertyToBusinessTemplate(self, sequence=None, **kw): + """Add a site property into a business template.""" + bt = sequence.get('current_bt', None) + self.failUnless(bt is not None) + bt.edit(template_site_property_id_list=('a_property',)) + + def stepCheckSkinSelectionRemoved(self, sequence=None, **kw): + """ + Check that a skin selection has been removed. + """ + self.assertTrue('Foo' not in self.portal.portal_skins.getSkinSelections()) + + def stepCheckSkinSelectionNotRemoved(self, sequence=None, **kw): + """ + Check that a skin selection has not been removed. + """ + self.assertTrue('Foo' in self.portal.portal_skins.getSkinSelections()) + + def stepUserDisableSkinSelectionRegistration(self, sequence=None, **kw): + """ + Simulate User disabling skin registration from UI. + """ + self.app.REQUEST.set('your_register_skin_selection', 0) + + def stepUserSelectSkinToBeChanged(self, sequence=None, **kw): + """ + User selects skin to be changed from UI. + """ + select_skin_to_be_changed_list = self.portal.portal_skins.getSkinSelections()[:1] + select_skin_not_to_be_changed_list = self.portal.portal_skins.getSkinSelections()[1:] + sequence.edit(select_skin_to_be_changed_list = select_skin_to_be_changed_list, \ + select_skin_not_to_be_changed_list = select_skin_not_to_be_changed_list) + self.app.REQUEST.set('your_skin_layer_list', select_skin_to_be_changed_list) + + def stepCheckUserSelectedSkinToBeChanged(self, sequence=None, **kw): + """ + Check that only selected to be changed skins are affected. + """ + skin_folder_id = sequence.get('skin_folder_id') + select_skin_to_be_changed_list = sequence.get('select_skin_to_be_changed_list') + select_skin_not_to_be_changed_list = sequence.get('select_skin_not_to_be_changed_list') + for skin_name in select_skin_to_be_changed_list: + self.assertTrue(skin_folder_id in self.portal.portal_skins.getSkinPath(skin_name)) + for skin_name in select_skin_not_to_be_changed_list: + self.assertTrue(skin_folder_id not in self.portal.portal_skins.getSkinPath(skin_name)) + + def stepCheckSkinFolderPriorityOn(self, sequence=None, **kw): + """ + Check skin folder priority + """ + ps = self.portal.portal_skins + for skin in ps.getSkinSelections(): + self.assertEquals('erp5_core', ps.getSkinPath(skin).split(',')[0]) + self.assertEquals('erp5_geek', ps.getSkinPath(skin).split(',')[1]) + + def stepCheckSkinFolderPriorityOff(self, sequence=None, **kw): + """ + Check skin folder priority off + """ + ps = self.portal.portal_skins + for skin in ps.getSkinSelections(): + self.assertEquals('erp5_geek', ps.getSkinPath(skin).split(',')[0]) + self.assertEquals('erp5_core', ps.getSkinPath(skin).split(',')[1]) + + def stepUserDisableSkinFolderPriority(self, sequence=None, **kw): + """ + User chooses skin folder priority off from UI + """ + self.app.REQUEST.set('your_reorder_skin_selection', 0) + + def stepSetExistingSkinFolderPriority(self, sequence=None, **kw): + """ + Set exisitng skin priority for test + """ + skin_folder = self.portal.portal_skins['erp5_core'] + if not skin_folder.hasProperty('business_template_skin_layer_priority'): + skin_folder.manage_addProperty('business_template_skin_layer_priority', \ + 10000.0, 'float') + + def stepSetBusinessTemplateSkinFolderPriority(self, sequence=None, **kw): + """ + Set skin folder priority. + """ + skin_folder_id = sequence.get('skin_folder_id') + skin_folder = self.portal.portal_skins[skin_folder_id] + skin_folder.manage_addProperty('business_template_skin_layer_priority', 9999.0, 'float') + + def stepModifySkinFolder(self, sequence=None, **kw): + """ + Modify the skin folder + """ + ps = self.getSkinsTool() + skin_id = sequence.get('skin_folder_id') + skin_folder = ps._getOb(skin_id, None) + skin_folder._setProperty( + 'business_template_skin_layer_priority', + 99, type='float') + # Make sure it is really set. + self.assertEquals( + 99, skin_folder.getProperty('business_template_skin_layer_priority')) + + def stepUnmodifySkinFolder(self, sequence=None, **kw): + ps = self.getSkinsTool() + skin_id = sequence.get('skin_folder_id') + skin_folder = ps._getOb(skin_id, None) + skin_folder._delProperty('business_template_skin_layer_priority') + self.assertEquals( + None, skin_folder.getProperty('business_template_skin_layer_priority')) + + def stepCheckModifiedSkinFolderExists(self, sequence=None, **kw): + """ + Check modified skin folder + """ + ps = self.getSkinsTool() + skin_id = sequence.get('skin_folder_id') + skin_folder = ps._getOb(skin_id, None) + self.assertEquals( + 99, skin_folder.getProperty('business_template_skin_layer_priority')) + + def stepCreateDocument(self, sequence=None, **kw): + document_title = 'UnitTest' + document_data = """class UnitTest: + meta_type = 'ERP5 Unit Test' + portal_type = 'Unit Test'""" + cfg = getConfiguration() + file_path = os.path.join(cfg.instancehome, 'Document', document_title+'.py') + if os.path.exists(file_path): + os.remove(file_path) + f = file(file_path, 'w') + f.write(document_data) + f.close() + self.failUnless(os.path.exists(file_path)) + sequence.edit(document_title=document_title, document_path=file_path, + document_data=document_data) + + def stepAddDocumentToBusinessTemplate(self, sequence=None, **kw): + bt = sequence['current_bt'] + bt.edit(template_document_id_list=[sequence['document_title']]) + + def stepRemoveDocument(self, sequence=None, **kw): + document_path = sequence['document_path'] + os.remove(document_path) + self.failIf(os.path.exists(document_path)) + + def stepCheckDocumentExists(self, sequence=None, **kw): + self.failIf(not os.path.exists(sequence['document_path'])) + + def stepCheckDocumentRemoved(self, sequence=None, **kw): + self.failIf(os.path.exists(sequence['document_path'])) + + def stepCreateTest(self, sequence=None, **kw): + test_title = 'UnitTest' + test_data = """class UnitTest: + pass""" + cfg = getConfiguration() + file_path = os.path.join(cfg.instancehome, 'tests', test_title+'.py') + if os.path.exists(file_path): + os.remove(file_path) + f = file(file_path, 'w') + f.write(test_data) + f.close() + self.failUnless(os.path.exists(file_path)) + sequence.edit(test_title=test_title, test_path=file_path, + test_data=test_data) + + def stepAddTestToBusinessTemplate(self, sequence=None, **kw): + bt = sequence['current_bt'] + bt.edit(template_test_id_list=[sequence['test_title']]) + + def stepRemoveTest(self, sequence=None, **kw): + test_path = sequence['test_path'] + os.remove(test_path) + self.failIf(os.path.exists(test_path)) + + def stepCheckTestExists(self, sequence=None, **kw): + self.failIf(not os.path.exists(sequence['test_path'])) + + def stepCheckTestRemoved(self, sequence=None, **kw): + self.failIf(os.path.exists(sequence['test_path'])) + + def stepCheckDocumentPropertySheetSameName(self, sequence=None, **kw): + self.assertEqual(sequence['ps_title'], sequence['document_title']) + self.assertEqual(os.path.basename(sequence['document_path']), + os.path.basename(sequence['ps_path'])) + + def stepCheckDocumentTestSameName(self, sequence=None, **kw): + self.assertEqual(sequence['test_title'], sequence['document_title']) + self.assertEqual(os.path.basename(sequence['document_path']), + os.path.basename(sequence['test_path'])) + + save_current_business_template_sequence_string = '\ + CheckNotInstalledInstallationState \ + BuildBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + CheckObjectPropertiesInBusinessTemplate \ + SaveBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + ' + + def stepRemovePropertySheetFromBusinessTemplate(self, sequence=None, **kw): + """ + Add Property Sheet to Business Template + """ + sequence['current_bt'].edit(template_property_sheet_id_list=[]) + + def stepRemoveTestFromBusinessTemplate(self, sequence=None, **kw): + """ + Add Property Sheet to Business Template + """ + sequence['current_bt'].edit(template_test_id_list=[]) + + def stepCreateAllPropertySheetsFromFilesystem(self, sequence=None, **kw): + self.portal.portal_property_sheets.createAllPropertySheetsFromFilesystem() + + def stepRemovePropertySheetZodbOnly(self, sequence=None, **kw): + """ + Remove Property Sheet, but only from ZODB + """ + self.portal.portal_property_sheets.manage_delObjects([sequence['ps_title']]) + + def stepCheckDraftBuildingState(self, sequence=None, **kw): + self.assertEquals(sequence['current_bt'].getBuildingState(), 'draft') + + def stepSimulateAndCopyPrePropertySheetMigrationBusinessTemplate(self, sequence=None, **kw): + portal = self.getPortalObject() + template_tool = portal.portal_templates + current_bt = sequence['current_bt'] + cb_data = template_tool.manage_copyObjects([current_bt.getId()]) + copied, = template_tool.manage_pasteObjects(cb_data) + current = current_bt._property_sheet_item._objects.copy() + current_bt._property_sheet_item._objects = PersistentMapping() + for k,v in current.iteritems(): + k = k.lstrip('portal_property_sheets/') + current_bt._property_sheet_item._objects[k] = v + sequence.edit(current_bt=template_tool._getOb(copied['new_id'])) + + +class TestBusinessTemplate(BusinessTemplateMixin): + """ + Test these operations: + + - Create a template + + - Install a template + + - Uninstall a template + + - Upgrade a template + """ + + def getTitle(self): + return "Business Template" + + # tests + def test_Title(self): + """Tests the Title of the Template Tool.""" + self.assertEquals('Template Tool', self.getTemplateTool().Title()) + + def test_01_checkNewSite(self): + """Test Check New Site""" + sequence_list = SequenceList() + sequence_string = '\ + UseCoreBusinessTemplate \ + CheckTools \ + CheckBuiltBuildingState \ + CheckInstalledInstallationState \ + CheckSkinsLayers \ + ' + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self) + + # test of portal types + def test_02_BusinessTemplateWithPortalTypes(self): + """Test Business Template With Portal Types""" + sequence_list = SequenceList() + sequence_string = '\ + CreatePortalType \ + CreateNewBusinessTemplate \ + UseExportBusinessTemplate \ + AddPortalTypeToBusinessTemplate \ + FillPortalTypesFields \ + CheckModifiedBuildingState \ + CheckNotInstalledInstallationState \ + BuildBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + CheckObjectPropertiesInBusinessTemplate \ + SaveBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + RemovePortalType \ + RemoveBusinessTemplate \ + RemoveAllTrashBins \ + ImportBusinessTemplate \ + UseImportBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + InstallBusinessTemplate \ + Tic \ + CheckInstalledInstallationState \ + CheckBuiltBuildingState \ + CheckNoTrashBin \ + CheckSkinsLayers \ + CheckPortalTypeExists \ + CreateSecondBusinessTemplate \ + UseSecondBusinessTemplate \ + AddPortalTypeToBusinessTemplate \ + FillPortalTypesFields \ + ModifyPortalTypeInBusinessTemplate \ + CheckModifiedBuildingState \ + CheckNotInstalledInstallationState \ + BuildBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + CheckObjectPropertiesInBusinessTemplate \ + SaveBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + RemoveBusinessTemplate \ + RemoveAllTrashBins \ + ImportBusinessTemplate \ + UseImportBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + InstallBusinessTemplate \ + Tic \ + CheckInstalledInstallationState \ + CheckBuiltBuildingState \ + CheckSkinsLayers \ + CheckPortalTypeExists \ + UninstallBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + CheckPortalTypeRemoved \ + ' + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self) + + def test_021_BusinessTemplateWithPortalTypesAndWrongValues(self): + """Test Business Template With Portal Types and Bad Values""" + sequence_list = SequenceList() + sequence_string = '\ + CreatePortalType \ + CreateNewBusinessTemplate \ + UseExportBusinessTemplate \ + AddPortalTypeToBusinessTemplate \ + FillPortalTypesFields \ + FillWrongPortalTypesFields \ + CheckModifiedBuildingState \ + CheckNotInstalledInstallationState \ + CheckBuildWithBadPortalTypeFailed \ + RemovePortalType \ + RemoveBusinessTemplate \ + RemoveAllTrashBins \ + ' + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self) + + # test of skins + def test_03_BusinessTemplateWithSkins(self): + """Test Business Template With Skin Folder""" + sequence_list = SequenceList() + sequence_string = '\ + CreateSkinFolder \ + CreateNewBusinessTemplate \ + UseExportBusinessTemplate \ + AddSkinFolderToBusinessTemplate \ + CheckModifiedBuildingState \ + CheckNotInstalledInstallationState \ + BuildBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + CheckObjectPropertiesInBusinessTemplate \ + SaveBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + RemoveSkinFolder \ + RemoveBusinessTemplate \ + RemoveAllTrashBins \ + ImportBusinessTemplate \ + UseImportBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + InstallBusinessTemplate \ + Tic \ + CheckInstalledInstallationState \ + CheckBuiltBuildingState \ + CheckNoTrashBin \ + CheckSkinsLayers \ + CheckSkinFolderExists \ + UninstallBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + CheckSkinFolderRemoved \ + ' + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self) + + # test of workflow + def test_04_BusinessTemplateWithWorkflow(self): + """Test Business Template With Workflow""" + sequence_list = SequenceList() + sequence_string = '\ + CreatePortalType \ + CreateWorkflow \ + CreateNewBusinessTemplate \ + UseExportBusinessTemplate \ + AddWorkflowToBusinessTemplate \ + AddWorkflowChainToBusinessTemplate \ + CheckModifiedBuildingState \ + CheckNotInstalledInstallationState \ + BuildBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + CheckObjectPropertiesInBusinessTemplate \ + SaveBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + RemoveWorkflow \ + RemoveBusinessTemplate \ + RemoveAllTrashBins \ + ImportBusinessTemplate \ + UseImportBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + InstallBusinessTemplate \ + Tic \ + CheckInstalledInstallationState \ + CheckBuiltBuildingState \ + CheckNoTrashBin \ + CheckSkinsLayers \ + CheckWorkflowExists \ + UninstallBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + CheckWorkflowRemoved \ + ' + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self) + + def test_041_BusinessTemplateWithWorkflowRemoved(self): + """Test Business Template With Remove Of Workflow""" + sequence_list = SequenceList() + sequence_string = '\ CreatePortalType \ CreateWorkflow \ CreateNewBusinessTemplate \ @@ -5059,67 +5605,6 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) - def stepSetSkinFolderRegistredSelections(self, sequence=None, **kw): - ps = self.getSkinsTool() - skin_id = sequence.get('skin_folder_id') - skin_folder = ps._getOb(skin_id, None) - skin_folder._setProperty( - 'business_template_registered_skin_selections', ('Foo',), - type='tokens') - - def stepSetSkinFolderRegistredSelections2(self, sequence=None, **kw): - ps = self.getSkinsTool() - skin_id = sequence.get('skin_folder_id') - skin_folder = ps._getOb(skin_id, None) - skin_folder._updateProperty( - 'business_template_registered_skin_selections', ('Foo', 'Bar',)) - - def stepCreateSkinSelection(self, sequence=None, **kw): - ps = self.getSkinsTool() - ps.manage_skinLayers(skinpath=('erp5_core',), skinname='Foo', add_skin=1) - - def stepSetStaticSkinFolderRegistredSelections(self, sequence=None, **kw): - ps = self.getSkinsTool() - skin_id = sequence.get('static_skin_folder_id') - skin_folder = ps._getOb(skin_id, None) - skin_folder._setProperty( - 'business_template_registered_skin_selections', ('Foo',), - type='tokens') - selection = ps.getSkinPath('Foo') - selection = selection.split(',') - if skin_id not in selection: - selection.append(skin_id) - ps.manage_skinLayers(skinpath=tuple(selection), - skinname='Foo', add_skin=1) - - def stepCheckSkinSelectionAdded(self, sequence=None, **kw): - ps = self.getSkinsTool() - skin_id = sequence.get('skin_folder_id') - # a new skin selection is added - self.assertTrue('Foo' in ps.getSkinSelections()) - # and it contains good layers - layers = ps.getSkinPath('Foo').split(',') - self.assertTrue(skin_id in layers, layers) - self.assertTrue('erp5_core' in layers, layers) - self.assertFalse('erp5_xhtml_style' in layers, layers) - skin_folder = ps._getOb(skin_id, None) - skin_selection_list = skin_folder.getProperty( - 'business_template_registered_skin_selections', ()) - self.assertTrue('Foo' in skin_selection_list) - - def stepCheckStaticSkinSelection(self, sequence=None, **kw): - ps = self.getSkinsTool() - skin_id = sequence.get('skin_folder_id') - static_skin_id = sequence.get('static_skin_folder_id') - # a new skin selection is added - self.assertTrue('Foo' in ps.getSkinSelections()) - # and it contains good layers - layers = ps.getSkinPath('Foo').split(',') - self.assertTrue(skin_id in layers, layers) - self.assertTrue('erp5_core' in layers, layers) - self.assertFalse('erp5_xhtml_style' in layers, layers) - self.assertTrue(static_skin_id in layers, layers) - def test_33_BusinessTemplateWithNewSkinSelection(self): """Test Business Template With New Skin Selection""" sequence_list = SequenceList() @@ -5501,86 +5986,6 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): self.assertNotEqual(new_bt, newer_bt) self.assertEqual(newer_bt.getRevision(), second_revision) - def stepCreateCustomWorkflow(self, sequence=None, **kw): - """ - Create a custom workflow - """ - wf_id = 'custom_geek_workflow' - pw = self.getWorkflowTool() - addWorkflowByType(pw, WORKFLOW_TYPE, wf_id) - workflow = pw._getOb(wf_id, None) - self.failUnless(workflow is not None) - sequence.edit(workflow_id=workflow.getId()) - cbt = pw._chains_by_type - props = {} - if cbt is not None: - for id, wf_ids in cbt.items(): - props['chain_%s' % id] = ','.join(wf_ids) - key = 'chain_Geek Object' - if props.has_key(key): - props[key] = '%s,%s' % (props[key], wf_id) - else: - props[key] = wf_id - pw.manage_changeWorkflows('', props=props) - - def stepCreateCustomBusinessTemplate(self, sequence=None, **kw): - """ - Create a custom Business Template - """ - pt = self.getTemplateTool() - template = pt.newContent(portal_type='Business Template') - self.failUnless(template.getBuildingState() == 'draft') - self.failUnless(template.getInstallationState() == 'not_installed') - template.edit(title='custom geek template', - version='1.0', - description='custom bt for unit_test') - sequence.edit(export_bt=template) - - def stepCheckCustomWorkflowChain(self, sequence=None, **kw): - """ - Check custom workflow chain - """ - present = 0 - pw = self.getWorkflowTool() - cbt = pw._chains_by_type - if cbt is not None: - for id, wf_ids in cbt.items(): - if id == "Geek Object": - present = 1 - self.assertEqual(present, 1) - self.assertSameSet(cbt['Geek Object'], - ('geek_workflow', 'custom_geek_workflow')) - - def stepCheckOriginalWorkflowChain(self, sequence=None, **kw): - """ - Check original workflow chain - """ - present = 0 - pw = self.getWorkflowTool() - cbt = pw._chains_by_type - if cbt is not None: - for id, wf_ids in cbt.items(): - if id == "Geek Object": - present = 1 - self.assertEqual(present, 1) - self.assertSameSet(cbt['Geek Object'], - ('geek_workflow', )) - - def stepCheckEmptyWorkflowChain(self, sequence=None, **kw): - """ - Check that workflow chain is empty - """ - present = 0 - pw = self.getWorkflowTool() - cbt = pw._chains_by_type - if cbt is not None: - for id, wf_ids in cbt.items(): - if id == "Geek Object": - present = 1 - break - if present: - self.assertEqual(0, len(wf_ids)) - def test_34_RemovePartialWorkflowChain(self): """Test Remove Chain""" sequence_list = SequenceList() @@ -5640,42 +6045,6 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) - def stepCopyBusinessTemplate(self, sequence=None, **kw): - """ - Copy business template - """ - portal = self.getPortalObject() - template_tool = portal.portal_templates - import_bt = sequence.get('current_bt') - cb_data = template_tool.manage_copyObjects([import_bt.getId()]) - copied, = template_tool.manage_pasteObjects(cb_data) - sequence.edit(current_bt=template_tool._getOb(copied['new_id'])) - - def stepRemoveWorkflowFromBusinessTemplate(self, sequence=None, **kw): - """ - Remove workflow to business template - """ - bt = sequence.get('current_bt', None) - self.failUnless(bt is not None) - current_twi = list(bt.getTemplateWorkflowIdList()) - current_twi.remove(sequence.get('workflow_id', '')) - bt.edit(template_workflow_id_list=current_twi) - - def stepRemoveWorkflowChainFromBusinessTemplate(self, sequence=None, **kw): - """ - Remove workflow chain to business template - """ - bt = sequence.get('current_bt', None) - self.failUnless(bt is not None) - workflow_id = sequence.get('workflow_id', '') - new_value = [] - workflow_chain_list = list(bt.getTemplatePortalTypeWorkflowChainList()) - for workflow_chain in workflow_chain_list: - portal_type, wkflow_id = workflow_chain.split(' | ') - if wkflow_id != workflow_id: - new_value.append(workflow_chain) - bt.edit(template_portal_type_workflow_chain_list=new_value) - def test_35_UpdatePartialWorkflowChain(self): """Test Update Workflow Chain""" sequence_list = SequenceList() @@ -5821,49 +6190,6 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) - def stepCreatePortalTypeRole(self, sequence=None, **kw): - """ - Create portal type role - """ - pt = self.getTypeTool() - object_id = sequence.get('object_ptype_id') - object_pt = pt._getOb(object_id) - object_pt.newContent(portal_type='Role Information', - title='Geek Role Definition', - description='A definition with non ascii chars éà è', - role_name_list=('geek_role_definition',), - role_category_list=('group/g1','function/f1'), - role_base_category_script_id='Base Category Script', - role_base_category_list=('group','site')) - - sequence.edit(portal_type_role='geek_role_definition') - - def stepAddPortalTypeRolesToBusinessTemplate(self, sequence=None, **kw): - """ - Add type role to business template - """ - bt = sequence.get('current_bt', None) - self.failUnless(bt is not None) - ptype_ids = [] - ptype_ids.append(sequence.get('object_ptype_id', '')) - ptype_ids.append(sequence.get('module_ptype_id', '')) - self.assertEqual(len(ptype_ids), 2) - bt.edit(template_portal_type_roles_list=ptype_ids) - - def stepCheckPortalTypeRoleExists(self, sequence=None, **kw): - """ - Cehck that portal type role exist - """ - pt = self.getTypeTool() - object_id = sequence.get('object_ptype_id') - role, = pt[object_id].getRoleInformationList() - self.assertEqual('Geek Role Definition', role.getTitle()) - self.assertEqual(['geek_role_definition'], role.getRoleNameList()) - self.assertEqual('A definition with non ascii chars éà è', role.getDescription()) - self.assertEqual(['group/g1','function/f1'], role.getRoleCategoryList()) - self.assertEqual(['group','site'], role.getRoleBaseCategoryList()) - self.assertEqual('Base Category Script', role.getRoleBaseCategoryScriptId()) - def test_36_CheckPortalTypeRoles(self): """Test Portal Type Roles""" sequence_list = SequenceList() @@ -5904,32 +6230,6 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) - def stepModifyPortalType(self, sequence=None, **kw): - """ - Modify Portal Type - """ - pt = self.getTypeTool() - object_type = pt._getOb('Geek Object', None) - object_type.title = 'Modified %s' % object_type.title - - def stepUnmodifyPortalType(self, sequence=None, **kw): - """ - Unmodify Portal Type - """ - pt = self.getTypeTool() - object_type = pt._getOb('Geek Object', None) - object_type.title = object_type.title[len('Modified '):] - - def stepCheckModifiedPortalTypeExists(self, sequence=None, **kw): - """ - Check presence of modified portal type - """ - self.stepCheckPortalTypeExists(sequence=sequence, **kw) - pt = self.getTypeTool() - object_id = sequence.get('object_ptype_id') - object_type = pt._getOb(object_id, None) - self.failUnless(object_type.title.startswith('Modified ')) - def test_37_UpdatePortalType(self): """Test Update Portal Type""" sequence_list = SequenceList() @@ -5982,38 +6282,6 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) - def stepCreateFakeZODBScript(self, sequence=None, **kw): - """Create a Script inside portal_skins - """ - grain_of_sand = ''.join([random.choice(string.ascii_letters) for i in xrange(10)]) - python_script_id = 'ERP5Site_dummyScriptWhichRandomId%s' % grain_of_sand - skin_folder_id = 'custom' - if getattr(self.portal.portal_skins, skin_folder_id, None) is None: - self.portal.portal_skins.manage_addProduct['OFSP'].manage_addFolder(skin_folder_id) - skin_folder = self.portal.portal_skins[skin_folder_id] - skin_folder.manage_addProduct['PythonScripts'].manage_addPythonScript( - id=python_script_id) - sequence.set('python_script_id', python_script_id) - sequence.set('skin_folder_id', skin_folder_id) - - def stepAddCustomSkinFolderToBusinessTemplate(self, sequence=None, **kw): - """ - Add types to business template - """ - bt = sequence.get('current_bt', None) - self.failUnless(bt is not None) - template_skin_id_list = list(bt.getProperty('template_skin_id_list')) - template_skin_id_list.append('custom') - bt.edit(template_skin_id_list=template_skin_id_list) - - def stepCheckFakeScriptIsDeleted(self, sequence=None, **kw): - """Check that script inside ZODB is deleted by BT reinstallation - """ - python_script_id = sequence.get('python_script_id') - skin_folder_id = sequence.get('skin_folder_id') - folder = self.portal.portal_skins[skin_folder_id] - self.assertTrue(python_script_id not in folder.objectIds()) - def test_38_CheckReinstallation(self): """Test Reinstallation""" sequence_list = SequenceList() @@ -6047,122 +6315,6 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) - def stepSetOldSitePropertyValue(self, sequence=None, **kw): - """Set the old value to a site property.""" - sequence.set('site_property_value', 'old') - - def stepSetNewSitePropertyValue(self, sequence=None, **kw): - """Set the new value to a site property.""" - sequence.set('site_property_value', 'new') - - def stepCreateSiteProperty(self, sequence=None, **kw): - """Create a site property.""" - portal = self.getPortal() - portal._setProperty('a_property', sequence.get('site_property_value')) - - def stepModifySiteProperty(self, sequence=None, **kw): - """Modify a site property.""" - portal = self.getPortal() - portal._updateProperty('a_property', sequence.get('site_property_value')) - - def stepCheckSiteProperty(self, sequence=None, **kw): - """Check a site property.""" - portal = self.getPortal() - self.assertEquals(portal.getProperty('a_property'), - sequence.get('site_property_value')) - - def stepCheckSitePropertyRemoved(self, sequence=None, **kw): - """Check if a site property is removed.""" - portal = self.getPortal() - self.failIf(portal.hasProperty('a_property')) - - def stepAddSitePropertyToBusinessTemplate(self, sequence=None, **kw): - """Add a site property into a business template.""" - bt = sequence.get('current_bt', None) - self.failUnless(bt is not None) - bt.edit(template_site_property_id_list=('a_property',)) - - def stepCheckSkinSelectionRemoved(self, sequence=None, **kw): - """ - Check that a skin selection has been removed. - """ - self.assertTrue('Foo' not in self.portal.portal_skins.getSkinSelections()) - - def stepCheckSkinSelectionNotRemoved(self, sequence=None, **kw): - """ - Check that a skin selection has not been removed. - """ - self.assertTrue('Foo' in self.portal.portal_skins.getSkinSelections()) - - def stepUserDisableSkinSelectionRegistration(self, sequence=None, **kw): - """ - Simulate User disabling skin registration from UI. - """ - self.app.REQUEST.set('your_register_skin_selection', 0) - - def stepUserSelectSkinToBeChanged(self, sequence=None, **kw): - """ - User selects skin to be changed from UI. - """ - select_skin_to_be_changed_list = self.portal.portal_skins.getSkinSelections()[:1] - select_skin_not_to_be_changed_list = self.portal.portal_skins.getSkinSelections()[1:] - sequence.edit(select_skin_to_be_changed_list = select_skin_to_be_changed_list, \ - select_skin_not_to_be_changed_list = select_skin_not_to_be_changed_list) - self.app.REQUEST.set('your_skin_layer_list', select_skin_to_be_changed_list) - - def stepCheckUserSelectedSkinToBeChanged(self, sequence=None, **kw): - """ - Check that only selected to be changed skins are affected. - """ - skin_folder_id = sequence.get('skin_folder_id') - select_skin_to_be_changed_list = sequence.get('select_skin_to_be_changed_list') - select_skin_not_to_be_changed_list = sequence.get('select_skin_not_to_be_changed_list') - for skin_name in select_skin_to_be_changed_list: - self.assertTrue(skin_folder_id in self.portal.portal_skins.getSkinPath(skin_name)) - for skin_name in select_skin_not_to_be_changed_list: - self.assertTrue(skin_folder_id not in self.portal.portal_skins.getSkinPath(skin_name)) - - def stepCheckSkinFolderPriorityOn(self, sequence=None, **kw): - """ - Check skin folder priority - """ - ps = self.portal.portal_skins - for skin in ps.getSkinSelections(): - self.assertEquals('erp5_core', ps.getSkinPath(skin).split(',')[0]) - self.assertEquals('erp5_geek', ps.getSkinPath(skin).split(',')[1]) - - def stepCheckSkinFolderPriorityOff(self, sequence=None, **kw): - """ - Check skin folder priority off - """ - ps = self.portal.portal_skins - for skin in ps.getSkinSelections(): - self.assertEquals('erp5_geek', ps.getSkinPath(skin).split(',')[0]) - self.assertEquals('erp5_core', ps.getSkinPath(skin).split(',')[1]) - - def stepUserDisableSkinFolderPriority(self, sequence=None, **kw): - """ - User chooses skin folder priority off from UI - """ - self.app.REQUEST.set('your_reorder_skin_selection', 0) - - def stepSetExistingSkinFolderPriority(self, sequence=None, **kw): - """ - Set exisitng skin priority for test - """ - skin_folder = self.portal.portal_skins['erp5_core'] - if not skin_folder.hasProperty('business_template_skin_layer_priority'): - skin_folder.manage_addProperty('business_template_skin_layer_priority', \ - 10000.0, 'float') - - def stepSetBusinessTemplateSkinFolderPriority(self, sequence=None, **kw): - """ - Set skin folder priority. - """ - skin_folder_id = sequence.get('skin_folder_id') - skin_folder = self.portal.portal_skins[skin_folder_id] - skin_folder.manage_addProperty('business_template_skin_layer_priority', 9999.0, 'float') - def test_39_CheckSiteProperties(self): """Test Site Properties""" sequence_list = SequenceList() @@ -6370,45 +6522,13 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): RemoveSkinFolder \ ImportBusinessTemplate \ UseImportBusinessTemplate \ - UserDisableSkinFolderPriority \ - InstallBusinessTemplate \ - Tic \ - CheckSkinFolderPriorityOff \ - ' - sequence_list.addSequenceString(sequence_string) - sequence_list.play(self) - - def stepModifySkinFolder(self, sequence=None, **kw): - """ - Modify the skin folder - """ - ps = self.getSkinsTool() - skin_id = sequence.get('skin_folder_id') - skin_folder = ps._getOb(skin_id, None) - skin_folder._setProperty( - 'business_template_skin_layer_priority', - 99, type='float') - # Make sure it is really set. - self.assertEquals( - 99, skin_folder.getProperty('business_template_skin_layer_priority')) - - def stepUnmodifySkinFolder(self, sequence=None, **kw): - ps = self.getSkinsTool() - skin_id = sequence.get('skin_folder_id') - skin_folder = ps._getOb(skin_id, None) - skin_folder._delProperty('business_template_skin_layer_priority') - self.assertEquals( - None, skin_folder.getProperty('business_template_skin_layer_priority')) - - def stepCheckModifiedSkinFolderExists(self, sequence=None, **kw): - """ - Check modified skin folder - """ - ps = self.getSkinsTool() - skin_id = sequence.get('skin_folder_id') - skin_folder = ps._getOb(skin_id, None) - self.assertEquals( - 99, skin_folder.getProperty('business_template_skin_layer_priority')) + UserDisableSkinFolderPriority \ + InstallBusinessTemplate \ + Tic \ + CheckSkinFolderPriorityOff \ + ' + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self) def test_163_UpdateSkinFolderWithRegisteredSkinSelection(self): """Test Update Skin Folder""" @@ -6897,118 +7017,6 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): new_bt5_obj.build() template_tool.export(new_bt5_obj) - def stepCreateDocument(self, sequence=None, **kw): - document_title = 'UnitTest' - document_data = """class UnitTest: - meta_type = 'ERP5 Unit Test' - portal_type = 'Unit Test'""" - cfg = getConfiguration() - file_path = os.path.join(cfg.instancehome, 'Document', document_title+'.py') - if os.path.exists(file_path): - os.remove(file_path) - f = file(file_path, 'w') - f.write(document_data) - f.close() - self.failUnless(os.path.exists(file_path)) - sequence.edit(document_title=document_title, document_path=file_path, - document_data=document_data) - - def stepAddDocumentToBusinessTemplate(self, sequence=None, **kw): - bt = sequence['current_bt'] - bt.edit(template_document_id_list=[sequence['document_title']]) - - def stepRemoveDocument(self, sequence=None, **kw): - document_path = sequence['document_path'] - os.remove(document_path) - self.failIf(os.path.exists(document_path)) - - def stepCheckDocumentExists(self, sequence=None, **kw): - self.failIf(not os.path.exists(sequence['document_path'])) - - def stepCheckDocumentRemoved(self, sequence=None, **kw): - self.failIf(os.path.exists(sequence['document_path'])) - - def stepCreateTest(self, sequence=None, **kw): - test_title = 'UnitTest' - test_data = """class UnitTest: - pass""" - cfg = getConfiguration() - file_path = os.path.join(cfg.instancehome, 'tests', test_title+'.py') - if os.path.exists(file_path): - os.remove(file_path) - f = file(file_path, 'w') - f.write(test_data) - f.close() - self.failUnless(os.path.exists(file_path)) - sequence.edit(test_title=test_title, test_path=file_path, - test_data=test_data) - - def stepAddTestToBusinessTemplate(self, sequence=None, **kw): - bt = sequence['current_bt'] - bt.edit(template_test_id_list=[sequence['test_title']]) - - def stepRemoveTest(self, sequence=None, **kw): - test_path = sequence['test_path'] - os.remove(test_path) - self.failIf(os.path.exists(test_path)) - - def stepCheckTestExists(self, sequence=None, **kw): - self.failIf(not os.path.exists(sequence['test_path'])) - - def stepCheckTestRemoved(self, sequence=None, **kw): - self.failIf(os.path.exists(sequence['test_path'])) - - def stepCheckDocumentPropertySheetSameName(self, sequence=None, **kw): - self.assertEqual(sequence['ps_title'], sequence['document_title']) - self.assertEqual(os.path.basename(sequence['document_path']), - os.path.basename(sequence['ps_path'])) - - def stepCheckDocumentTestSameName(self, sequence=None, **kw): - self.assertEqual(sequence['test_title'], sequence['document_title']) - self.assertEqual(os.path.basename(sequence['document_path']), - os.path.basename(sequence['test_path'])) - - save_current_business_template_sequence_string = '\ - CheckNotInstalledInstallationState \ - BuildBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - CheckObjectPropertiesInBusinessTemplate \ - SaveBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - ' - def test_BusinessTemplateWithDocument(self): - sequence_list = SequenceList() - sequence_string = '\ - CreateDocument \ - CreateNewBusinessTemplate \ - UseExportBusinessTemplate \ - AddDocumentToBusinessTemplate \ - CheckModifiedBuildingState \ - ' + self.save_current_business_template_sequence_string + '\ - RemoveDocument \ - RemoveBusinessTemplate \ - RemoveAllTrashBins \ - ImportBusinessTemplate \ - UseImportBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - InstallBusinessTemplate \ - Tic \ - CheckInstalledInstallationState \ - CheckBuiltBuildingState \ - CheckNoTrashBin \ - CheckSkinsLayers \ - CheckDocumentExists \ - UninstallBusinessTemplate \ - CheckBuiltBuildingState \ - CheckNotInstalledInstallationState \ - CheckDocumentRemoved \ - ' - sequence_list.addSequenceString(sequence_string) - sequence_list.play(self) - def test_BusinessTemplateWithTest(self): sequence_list = SequenceList() sequence_string = '\ @@ -7040,18 +7048,6 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) - def stepRemovePropertySheetFromBusinessTemplate(self, sequence=None, **kw): - """ - Add Property Sheet to Business Template - """ - sequence['current_bt'].edit(template_property_sheet_id_list=[]) - - def stepRemoveTestFromBusinessTemplate(self, sequence=None, **kw): - """ - Add Property Sheet to Business Template - """ - sequence['current_bt'].edit(template_test_id_list=[]) - def test_BusinessTemplateWithDocumentTestRemoved(self): """Checks that if Business Template defines Document and Test Document is not removed""" @@ -7103,31 +7099,6 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) - def stepCreateAllPropertySheetsFromFilesystem(self, sequence=None, **kw): - self.portal.portal_property_sheets.createAllPropertySheetsFromFilesystem() - - def stepRemovePropertySheetZodbOnly(self, sequence=None, **kw): - """ - Remove Property Sheet, but only from ZODB - """ - self.portal.portal_property_sheets.manage_delObjects([sequence['ps_title']]) - - def stepCheckDraftBuildingState(self, sequence=None, **kw): - self.assertEquals(sequence['current_bt'].getBuildingState(), 'draft') - - def stepSimulateAndCopyPrePropertySheetMigrationBusinessTemplate(self, sequence=None, **kw): - portal = self.getPortalObject() - template_tool = portal.portal_templates - current_bt = sequence['current_bt'] - cb_data = template_tool.manage_copyObjects([current_bt.getId()]) - copied, = template_tool.manage_pasteObjects(cb_data) - current = current_bt._property_sheet_item._objects.copy() - current_bt._property_sheet_item._objects = PersistentMapping() - for k,v in current.iteritems(): - k = k.lstrip('portal_property_sheets/') - current_bt._property_sheet_item._objects[k] = v - sequence.edit(current_bt=template_tool._getOb(copied['new_id'])) - def test_BusinessTemplateWithDocumentPropertySheetMigrated(self): """Checks that if Business Template defines Document and PropertySheet Document is not removed after Property Sheet was migrated and Business Template @@ -7190,8 +7161,125 @@ class TestBusinessTemplate(ERP5TypeTestCase, LogInterceptor): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) +class TestDocumentTemplateItem(BusinessTemplateMixin): + def test_BusinessTemplateWithDocument(self): + sequence_list = SequenceList() + sequence_string = '\ + CreateDocument \ + CreateNewBusinessTemplate \ + UseExportBusinessTemplate \ + AddDocumentToBusinessTemplate \ + CheckModifiedBuildingState \ + CheckNotInstalledInstallationState \ + BuildBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + CheckObjectPropertiesInBusinessTemplate \ + SaveBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + RemoveDocument \ + RemoveBusinessTemplate \ + RemoveAllTrashBins \ + ImportBusinessTemplate \ + UseImportBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + InstallBusinessTemplate \ + Tic \ + CheckInstalledInstallationState \ + CheckBuiltBuildingState \ + CheckNoTrashBin \ + CheckSkinsLayers \ + CheckDocumentExists \ + UninstallBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + CheckDocumentRemoved \ + ' + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self) + + def test_BusinessTemplateUpdateWithDocument(self): + sequence_list = SequenceList() + sequence_string = '\ + CreateDocument \ + CreateNewBusinessTemplate \ + UseExportBusinessTemplate \ + AddDocumentToBusinessTemplate \ + CheckModifiedBuildingState \ + CheckNotInstalledInstallationState \ + BuildBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + CheckObjectPropertiesInBusinessTemplate \ + SaveBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + RemoveDocument \ + RemoveBusinessTemplate \ + RemoveAllTrashBins \ + ImportBusinessTemplate \ + UseImportBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + InstallBusinessTemplate \ + Tic \ + CheckInstalledInstallationState \ + CheckBuiltBuildingState \ + CheckNoTrashBin \ + CheckSkinsLayers \ + CheckDocumentExists \ + RemoveDocument \ + CreateUpdatedDocument \ + CreateNewBusinessTemplate \ + UseExportBusinessTemplate \ + AddDocumentToBusinessTemplate \ + CheckModifiedBuildingState \ + CheckNotInstalledInstallationState \ + BuildBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + CheckObjectPropertiesInBusinessTemplate \ + SaveBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + CreateDocument \ + RemoveBusinessTemplate \ + RemoveAllTrashBins \ + ImportBusinessTemplate \ + UseImportBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + InstallBusinessTemplate \ + Tic \ + CheckUpdatedDocumentExists \ + UninstallBusinessTemplate \ + CheckBuiltBuildingState \ + CheckNotInstalledInstallationState \ + CheckDocumentRemoved \ + CheckWorkflowChainRemoved \ + ' + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self) + +class TestConstraintTemplateItem(TestDocumentTemplateItem): + def test(self): + raise NotImplemenetedError + +class TestExtensionTemplateItem(TestDocumentTemplateItem): + def test(self): + raise NotImplemenetedError + +class TestTestTemplateItem(TestDocumentTemplateItem): + def test(self): + raise NotImplemenetedError def test_suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestBusinessTemplate)) + suite.addTest(unittest.makeSuite(TestConstraintTemplateItem)) + suite.addTest(unittest.makeSuite(TestDocumentTemplateItem)) + suite.addTest(unittest.makeSuite(TestExtensionTemplateItem)) + suite.addTest(unittest.makeSuite(TestTestTemplateItem)) return suite