def test_bindings_skip_purge(self): from Products.CMFCore.exportimport.workflow import importWorkflowTool WF_ID_NON = 'non_dcworkflow_%s' WF_TITLE_NON = 'Non-DCWorkflow #%s' site = self._initSite() wf_tool = site.portal_workflow for i in range(4): nondcworkflow = DummyWorkflow(WF_TITLE_NON % i) nondcworkflow.title = WF_TITLE_NON % i wf_tool._setObject(WF_ID_NON % i, nondcworkflow) wf_tool._default_chain = (WF_ID_NON % 1,) wf_tool._chains_by_type['sometype'] = (WF_ID_NON % 2,) self.assertEqual(len(wf_tool.objectIds()), 4) context = DummyImportContext(site, False) context._files['workflows.xml'] = self._BINDINGS_TOOL_EXPORT importWorkflowTool(context) self.assertEqual(len(wf_tool.objectIds()), 4) self.assertEqual(len(wf_tool._default_chain), 2) self.assertEqual(wf_tool._default_chain[0], WF_ID_NON % 0) self.assertEqual(wf_tool._default_chain[1], WF_ID_NON % 1) self.assertEqual(len(wf_tool._chains_by_type), 2) self.assertEqual(wf_tool._chains_by_type['sometype'], (WF_ID_NON % 2,)) self.assertEqual(wf_tool._chains_by_type['anothertype'], (WF_ID_NON % 3,))
def test_fragment_skip_purge(self): from Products.CMFCore.exportimport.workflow import importWorkflowTool WF_ID_NON = 'non_dcworkflow_%s' WF_TITLE_NON = 'Non-DCWorkflow #%s' site, wf_tool = self._initSite() for i in range(4): nondcworkflow = DummyWorkflow(WF_TITLE_NON % i) nondcworkflow.title = WF_TITLE_NON % i wf_tool._setObject(WF_ID_NON % i, nondcworkflow) wf_tool._default_chain = (WF_ID_NON % 1,) wf_tool._chains_by_type['sometype'] = (WF_ID_NON % 2,) self.assertEqual(len(wf_tool.objectIds()), 4) context = DummyImportContext(site, False) context._files['workflows.xml'] = self._FRAGMENT_IMPORT importWorkflowTool(context) self.assertEqual(len(wf_tool.objectIds()), 4) self.assertEqual(len(wf_tool._default_chain), 1) self.assertEqual(wf_tool._default_chain[0], WF_ID_NON % 1) self.assertEqual(len(wf_tool._chains_by_type), 0)
def test_fragment_skip_purge(self): from Products.CMFCore.exportimport.workflow import importWorkflowTool WF_ID_NON = 'non_dcworkflow_%s' WF_TITLE_NON = 'Non-DCWorkflow #%s' site = self._initSite() wf_tool = site.portal_workflow for i in range(4): nondcworkflow = DummyWorkflow(WF_TITLE_NON % i) nondcworkflow.title = WF_TITLE_NON % i wf_tool._setObject(WF_ID_NON % i, nondcworkflow) wf_tool._default_chain = (WF_ID_NON % 1, ) wf_tool._chains_by_type['sometype'] = (WF_ID_NON % 2, ) self.assertEqual(len(wf_tool.objectIds()), 4) context = DummyImportContext(site, False) context._files['workflows.xml'] = self._FRAGMENT_IMPORT importWorkflowTool(context) self.assertEqual(len(wf_tool.objectIds()), 4) self.assertEqual(len(wf_tool._default_chain), 1) self.assertEqual(wf_tool._default_chain[0], WF_ID_NON % 1) self.assertEqual(len(wf_tool._chains_by_type), 0)
def test_empty_explicit_purge(self): from Products.CMFCore.exportimport.workflow import importWorkflowTool WF_ID_NON = 'non_dcworkflow_%s' WF_TITLE_NON = 'Non-DCWorkflow #%s' site = self._initSite() wf_tool = site.portal_workflow for i in range(4): nondcworkflow = DummyWorkflow(WF_TITLE_NON % i) nondcworkflow.title = WF_TITLE_NON % i wf_tool._setObject(WF_ID_NON % i, nondcworkflow) wf_tool._default_chain = (WF_ID_NON % 1,) wf_tool._chains_by_type['sometype'] = (WF_ID_NON % 2,) self.assertEqual(len(wf_tool.objectIds()), 4) context = DummyImportContext(site, True) context._files['workflows.xml'] = self._EMPTY_TOOL_EXPORT importWorkflowTool(context) self.assertEqual(len(wf_tool.objectIds()), 0) self.assertEqual(len(wf_tool._default_chain), 0) self.assertEqual(len(wf_tool._chains_by_type), 0)
def test_bindings_skip_purge(self): from Products.CMFCore.exportimport.workflow import importWorkflowTool WF_ID_NON = 'non_dcworkflow_%s' WF_TITLE_NON = 'Non-DCWorkflow #%s' site, wf_tool = self._initSite() for i in range(4): nondcworkflow = DummyWorkflow(WF_TITLE_NON % i) nondcworkflow.title = WF_TITLE_NON % i wf_tool._setObject(WF_ID_NON % i, nondcworkflow) wf_tool._default_chain = (WF_ID_NON % 1, ) wf_tool._chains_by_type['sometype'] = (WF_ID_NON % 2, ) self.assertEqual(len(wf_tool.objectIds()), 4) context = DummyImportContext(site, False) context._files['workflows.xml'] = self._BINDINGS_TOOL_EXPORT importWorkflowTool(context) self.assertEqual(len(wf_tool.objectIds()), 4) self.assertEqual(len(wf_tool._default_chain), 2) self.assertEqual(wf_tool._default_chain[0], WF_ID_NON % 0) self.assertEqual(wf_tool._default_chain[1], WF_ID_NON % 1) self.assertEqual(len(wf_tool._chains_by_type), 2) self.assertEqual(wf_tool._chains_by_type['sometype'], (WF_ID_NON % 2, )) self.assertEqual(wf_tool._chains_by_type['anothertype'], (WF_ID_NON % 3, ))
def test_import_site_includes_workflow(self): self._setUpAdapters() ITEM_IDS = ('foo', 'bar', 'baz') site = _makeFolder('site', site_folder=True) site._setObject('portal_workflow', self._makeWorkflowTool()) wftool = site.portal_workflow wftool._setObject('foo_workflow', DummyWorkflow('foo_workflow')) wftool.foo_workflow.state_var = "state" wftool.setDefaultChain('foo_workflow') wftool.setChainForPortalTypes((TEST_INI_AWARE,), 'foo_workflow', verify=False) context = DummyImportContext(site) context._files['structure/.objects'] = '\n'.join( ['%s,%s' % (x, TEST_INI_AWARE) for x in ITEM_IDS]) context._files['structure/.workflow_states'] = '\n'.join( ['%s,foo_workflow,draft' % (x) for x in ITEM_IDS]) for index in range(len(ITEM_IDS)): id = ITEM_IDS[index] context._files[ 'structure/%s.ini' % id] = KNOWN_INI % ('Title: %s' % id, 'xyzzy') importer = self._getImporter() importer(context) for item_id in ITEM_IDS: wf = wftool.getStatusOf("foo_workflow", site[item_id]) self.assertEqual(wf['state'], "draft")
def test_normal(self): from Products.CMFCore.exportimport.workflow import exportWorkflowTool WF_ID_NON = 'non_dcworkflow' WF_TITLE_NON = 'Non-DCWorkflow' site, wf_tool = self._initSite() nondcworkflow = DummyWorkflow(WF_TITLE_NON) nondcworkflow.title = WF_TITLE_NON wf_tool._setObject(WF_ID_NON, nondcworkflow) context = DummyExportContext(site) exportWorkflowTool(context) self.assertEqual(len(context._wrote), 2) filename, text, content_type = context._wrote[0] self.assertEqual(filename, 'workflows.xml') self._compareDOM(text, _NORMAL_TOOL_EXPORT) self.assertEqual(content_type, 'text/xml')
def test_normal(self): from Products.CMFCore.exportimport.workflow import exportWorkflowTool WF_ID_NON = 'non_dcworkflow' WF_TITLE_NON = 'Non-DCWorkflow' site = self._initSite() wf_tool = site.portal_workflow nondcworkflow = DummyWorkflow(WF_TITLE_NON) nondcworkflow.title = WF_TITLE_NON wf_tool._setObject(WF_ID_NON, nondcworkflow) context = DummyExportContext(site) exportWorkflowTool(context) self.assertEqual(len(context._wrote), 2) filename, text, content_type = context._wrote[0] self.assertEqual(filename, 'workflows.xml') self._compareDOM(text, _NORMAL_TOOL_EXPORT) self.assertEqual(content_type, 'text/xml')
def test_empty_explicit_purge(self): from Products.CMFCore.exportimport.workflow import importWorkflowTool WF_ID_NON = 'non_dcworkflow_%s' WF_TITLE_NON = 'Non-DCWorkflow #%s' site, wf_tool = self._initSite() for i in range(4): nondcworkflow = DummyWorkflow(WF_TITLE_NON % i) nondcworkflow.title = WF_TITLE_NON % i wf_tool._setObject(WF_ID_NON % i, nondcworkflow) wf_tool._default_chain = (WF_ID_NON % 1, ) wf_tool._chains_by_type['sometype'] = (WF_ID_NON % 2, ) self.assertEqual(len(wf_tool.objectIds()), 4) context = DummyImportContext(site, True) context._files['workflows.xml'] = self._EMPTY_TOOL_EXPORT importWorkflowTool(context) self.assertEqual(len(wf_tool.objectIds()), 0) self.assertEqual(len(wf_tool._default_chain), 0) self.assertEqual(len(wf_tool._chains_by_type), 0)
def test_export_site_includes_workflow(self): self._setUpAdapters() ITEM_IDS = ('foo', 'bar', 'baz') site = _makeFolder('site', site_folder=True) site._setObject('portal_workflow', self._makeWorkflowTool()) wftool = site.portal_workflow wftool._setObject('foo_workflow', DummyWorkflow('foo_workflow')) wftool.foo_workflow.state_var = "state" wftool.setDefaultChain('foo_workflow') wftool.setChainForPortalTypes((TEST_INI_AWARE, ), 'foo_workflow', verify=False) site.title = 'AAA' site.description = 'DESCRIPTION' for id in ITEM_IDS: site._setObject(id, _makeINIAware(id)) wftool.setStatusOf("foo_workflow", site[id], {"state": "published"}) context = DummyExportContext(site) exporter = self._getExporter() exporter(context) self.assertEqual(len(context._wrote), 3 + len(ITEM_IDS)) filename, text, content_type = context._wrote[0] self.assertEqual(filename, 'structure/.workflow_states') self.assertEqual(content_type, 'text/comma-separated-values') objects = [x for x in reader(StringIO(text))] self.assertEqual(len(objects), 3) for index in range(len(ITEM_IDS)): self.assertEqual(objects[index][0], ITEM_IDS[index]) self.assertEqual(objects[index][1], "foo_workflow") self.assertEqual(objects[index][2], "published")
def _populate(self, obj): obj._setObject('foo_workflow', DummyWorkflow('foo_workflow')) obj.setDefaultChain('foo_workflow') obj.setChainForPortalTypes(('Foo Type', ), '', verify=False)