def test_isActionSupported(self): wf = self._getDummyWorkflow() dummy = self.site._setObject('dummy', DummyContent()) # check publish self.assert_(wf.isActionSupported(dummy, 'publish')) # Check with kwargs. self.assert_(wf.isActionSupported(dummy, 'publish', arg1=1, arg2=2))
def test_wrapping2(self): # DummyContent does not implement IIndexableObject # no wrapper registered - should fall back to using # wrapper class directly dummy = DummyContent(catalog=1) ctool = self._makeOne() ctool.addIndex('meta_type', 'FieldIndex') ctool.catalog_object(dummy, '/dummy') query = {'meta_type': 'Dummy'} self.assertEqual(1, len(ctool._catalog.searchResults(query)))
def test_processActions( self ): """ Tracker #405: CatalogTool doesn't accept optional third argument, 'idxs', to 'catalog_object'. """ tool = CatalogTool() dummy = DummyContent(catalog=1) tool.catalog_object( dummy, '/dummy' ) tool.catalog_object( dummy, '/dummy', [ 'SearchableText' ] )
def test_manageDelObjects( self ): test = self.root.test foo = DummyContent( 'foo' ) test._setObject( 'foo', foo ) foo.reset() test.manage_delObjects( ids=[ 'foo' ] ) assert not foo.after_add_called assert foo.before_delete_called
def setUp(self): from Products.CMFCore.CatalogTool import CatalogTool from Products.CMFUid.UniqueIdAnnotationTool \ import UniqueIdAnnotationTool from Products.CMFUid.UniqueIdGeneratorTool \ import UniqueIdGeneratorTool SecurityTest.setUp(self) self.root._setObject('portal_catalog', CatalogTool()) self.root._setObject('portal_uidgenerator', UniqueIdGeneratorTool()) self.root._setObject('portal_uidannotation', UniqueIdAnnotationTool()) self.root._setObject('portal_uidhandler', self._getTargetClass()()) self.root._setObject('dummy', DummyContent(id='dummy')) self.root._setObject('dummy2', DummyContent(id='dummy2')) sm = getSiteManager() sm.registerUtility( self.root.portal_uidannotation , IUniqueIdAnnotationManagement ) sm.registerUtility(self.root.portal_uidgenerator, IUniqueIdGenerator)
def test_folderMove(self): # # Does the catalog stay synched when folders are moved? # from Products.CMFCore.PortalFolder import PortalFolder ttool = self.site._setObject('portal_types', TypesTool()) ctool = self.site._setObject('portal_catalog', DummyCatalogTool()) self.assertEqual(len(ctool), 0) folder = self._makeOne('folder') folder._setObject('sub', PortalFolder('sub', '')) folder.sub._setObject('foo', DummyContent('foo', catalog=1)) self.assertEqual(len(ctool), 1) self.failUnless(has_id(ctool, 'foo')) self.failUnless(has_path(ctool, '/bar/site/folder/sub/foo')) transaction.savepoint(optimistic=True) folder.manage_renameObject(id='sub', new_id='new_sub') self.assertEqual(len(ctool), 1) self.failUnless(has_id(ctool, 'foo')) self.failUnless(has_path(ctool, '/bar/site/folder/new_sub/foo')) folder._setObject('bar', DummyContent('bar', catalog=1)) self.assertEqual(len(ctool), 2) self.failUnless(has_id(ctool, 'bar')) self.failUnless(has_path(ctool, '/bar/site/folder/bar')) folder._setObject('sub2', PortalFolder('sub2', '')) sub2 = folder.sub2 # Waaa! force sub2 to allow paste of Dummy object. sub2.all_meta_types = [] sub2.all_meta_types.extend(sub2.all_meta_types) sub2.all_meta_types.extend(extra_meta_types()) transaction.savepoint(optimistic=True) cookie = folder.manage_cutObjects(ids=['bar']) sub2.manage_pasteObjects(cookie) self.failUnless(has_id(ctool, 'foo')) self.failUnless(has_id(ctool, 'bar')) self.assertEqual(len(ctool), 2) self.failUnless(has_path(ctool, '/bar/site/folder/sub2/bar'))
def test_provided(self): from Products.CMFCore.interfaces import IContentish from plone.indexer.interfaces import IIndexableObjectWrapper from Products.CMFCore.tests.base.dummy import DummyContent obj = DummyContent() w = IndexableObjectWrapper(obj, self.portal.portal_catalog) self.assertTrue(IIndexableObjectWrapper.providedBy(w)) self.assertTrue(IContentish.providedBy(w))
def test_events(self): events = [] @adapter(IBeforeTransitionEvent) def _handleBefore(event): events.append(event) provideHandler(_handleBefore) @adapter(IAfterTransitionEvent) def _handleAfter(event): events.append(event) provideHandler(_handleAfter) wf = self._getDummyWorkflow() dummy = self.site._setObject( 'dummy', DummyContent() ) wf.doActionFor(dummy, 'publish', comment='foo', test='bar') self.assertEquals(4, len(events)) evt = events[0] self.failUnless(IBeforeTransitionEvent.providedBy(evt)) self.assertEquals(dummy, evt.object) self.assertEquals('private', evt.old_state.id) self.assertEquals('private', evt.new_state.id) self.assertEquals(None, evt.transition) self.assertEquals({}, evt.status) self.assertEquals(None, evt.kwargs) evt = events[1] self.failUnless(IAfterTransitionEvent.providedBy(evt)) self.assertEquals(dummy, evt.object) self.assertEquals('private', evt.old_state.id) self.assertEquals('private', evt.new_state.id) self.assertEquals(None, evt.transition) self.assertEquals({'state': 'private', 'comments': ''}, evt.status) self.assertEquals(None, evt.kwargs) evt = events[2] self.failUnless(IBeforeTransitionEvent.providedBy(evt)) self.assertEquals(dummy, evt.object) self.assertEquals('private', evt.old_state.id) self.assertEquals('published', evt.new_state.id) self.assertEquals('publish', evt.transition.id) self.assertEquals({'state': 'private', 'comments': ''}, evt.status) self.assertEquals({'test' : 'bar', 'comment' : 'foo'}, evt.kwargs) evt = events[3] self.failUnless(IAfterTransitionEvent.providedBy(evt)) self.assertEquals(dummy, evt.object) self.assertEquals('private', evt.old_state.id) self.assertEquals('published', evt.new_state.id) self.assertEquals('publish', evt.transition.id) self.assertEquals({'state': 'published', 'comments': 'foo'}, evt.status) self.assertEquals({'test' : 'bar', 'comment' : 'foo'}, evt.kwargs)
def setUp(self): import Products.isurlinportal # Patch get_external_sites to return a fixed list of sites. self._original_get_external_sites = Products.isurlinportal.get_external_sites Products.isurlinportal.get_external_sites = dummy_get_external_sites # Create dummy site and content. self.site = DummySite(id="foo") self.site._setObject("foo", DummyFolder(id="foo")) self.site.foo._setObject("doc1", DummyContent(id="doc1"))
def test_manageDelObjects(self): acl_users = self.site._setObject('acl_users', DummyUserFolder()) newSecurityManager(None, acl_users.all_powerful_Oz) test = self._makeOne('test') foo = DummyContent('foo') test._setObject('foo', foo) foo.reset() test.manage_delObjects(ids=['foo']) self.assertFalse(foo.after_add_called) self.assertTrue(foo.before_delete_called)
def test_doActionFor(self): wtool = self.wtool wf = self._getDummyWorkflow() dummy = self.site._setObject( 'dummy', DummyContent() ) wtool.notifyCreated(dummy) self.assertEqual( wf._getStatusOf(dummy), {'state': 'private', 'comments': ''} ) wf.doActionFor(dummy, 'publish', comment='foo' ) self.assertEqual( wf._getStatusOf(dummy), {'state': 'published', 'comments': 'foo'} )
def test_content_methods(self): url_tool = self._makeOne() self.site._setObject( 'folder', DummyFolder(id='buz') ) self.site.folder._setObject( 'item', DummyContent(id='qux.html') ) obj = self.site.folder.item self.assertEqual( url_tool.getRelativeContentPath(obj) , ('buz', 'qux.html') ) self.assertEqual( url_tool.getRelativeContentURL(obj) , 'buz/qux.html' ) self.assertEqual( url_tool.getRelativeUrl(obj) , 'buz/qux.html' )
def test_processActions(self): """ Tracker #405: CatalogTool doesn't accept optional third argument, 'idxs', to 'catalog_object'. """ tool = self._makeOne() tool.addIndex('SearchableText', 'KeywordIndex') dummy = DummyContent(catalog=1) tool.catalog_object( dummy, '/dummy' ) tool.catalog_object( dummy, '/dummy', [ 'SearchableText' ] )
def test_search_member_wo_valid_roles(self): catalog = self._makeOne() catalog.addIndex('allowedRolesAndUsers', 'KeywordIndex') dummy = DummyContent(catalog=1) dummy._View_Permission = ('Blob',) catalog.catalog_object(dummy, '/dummy') self.loginWithRoles('Waggle') self.assertEqual(1, len(catalog._catalog.searchResults())) self.assertEqual(0, len(catalog.searchResults()))
def setUp(self): self.site = DummySite('site') self.site._path = '' self.site._setObject('portal_catalog', CatalogTool()) self.site.portal_catalog.addIndex('state', 'KeywordIndex') self.site._setObject('portal_types', DummyTool()) self.site._setObject('portal_workflow', WorkflowTool()) self.site._setObject('dummy', DummyContent('dummy')) self.site.dummy.state = 'private' self.site.portal_catalog.catalog_object(self.site.dummy) self._constructDummyWorkflow()
def test_isActionSupported(self): wf = self._getDummyWorkflow() dummy = self.site._setObject('dummy', DummyContent()) for action in ( 'submit', 'retract', 'publish', 'reject', ): self.assertTrue(wf.isActionSupported(dummy, action))
def _setupCallTests(self, aliases): # root root = Folder('root') # set up dummy type info with problematic double-default alias root._setObject('portal_types', DummyTool()) root.portal_types._type_actions = aliases # dummy content and skin root._setObject('dummycontent', DummyContent()) root._setObject('dummy_view', DummyObject()) return root.dummycontent
def test_isActionSupported_with_keywargs(self): wf = self._getDummyWorkflow() dummy = self.site._setObject('dummy', DummyContent()) for action in ( 'submit', 'retract', 'publish', 'reject', ): self.assert_(wf.isActionSupported(dummy, action, arg1=1, arg2=2))
def test_contents_methods(self): acl_users = self.site._setObject('acl_users', DummyUserFolder()) newSecurityManager(None, acl_users.all_powerful_Oz) ttool = TypesTool() getSiteManager().registerUtility(ttool, ITypesTool) f = self._makeOne('foo') self.assertEqual(f.objectValues(), []) self.assertEqual(f.contentIds(), []) self.assertEqual(f.contentItems(), []) self.assertEqual(f.contentValues(), []) self.assertEqual(f.listFolderContents(), []) self.assertEqual(f.listDAVObjects(), []) f._setObject('sub1', DummyContent('sub1')) self.assertEqual(f.objectValues(), [f.sub1]) self.assertEqual(f.contentIds(), []) self.assertEqual(f.contentItems(), []) self.assertEqual(f.contentValues(), []) self.assertEqual(f.listFolderContents(), []) self.assertEqual(f.listDAVObjects(), [f.sub1]) fti = FTIDATA_DUMMY[0].copy() ttool._setObject('Dummy Content', FTI(**fti)) self.assertEqual(f.objectValues(), [f.sub1]) self.assertEqual(f.contentIds(), ['sub1']) self.assertEqual(f.contentItems(), [('sub1', f.sub1)]) self.assertEqual(f.contentValues(), [f.sub1]) self.assertEqual(f.listFolderContents(), [f.sub1]) self.assertEqual(f.listDAVObjects(), [f.sub1]) f._setObject('hidden_sub2', DummyContent('hidden_sub2')) self.assertEqual(f.objectValues(), [f.sub1, f.hidden_sub2]) self.assertEqual(f.contentIds(), ['sub1', 'hidden_sub2']) self.assertEqual(f.contentItems(), [('sub1', f.sub1), ('hidden_sub2', f.hidden_sub2)]) self.assertEqual(f.contentValues(), [f.sub1, f.hidden_sub2]) self.assertEqual(f.listFolderContents(), [f.sub1]) self.assertEqual(f.listDAVObjects(), [f.sub1, f.hidden_sub2])
def setUp(self): SecurityTest.setUp(self) self.root._setObject('portal_uidannotation', self._getTargetClass()()) self.root._setObject('portal_uidhandler', DummyUniqueIdHandlerTool()) sm = getSiteManager() sm.registerUtility(self.root.portal_uidannotation, IUniqueIdAnnotationManagement) self.root._setObject('dummy', DummyContent(id='dummy')) self.root._setObject('site', SimpleFolder('site')) transaction.savepoint(optimistic=True)
def test_listActions(self): """test that a full set of context information is passed by the types tool """ tool = self.ttool ti = ActionTesterTypeInfo() setattr( tool, 'Dummy Content', ti ) dummy = self.site._setObject('dummy', DummyContent('dummy')) tool.listActions('fake_info', dummy) self.assertEqual(ti._action_info, 'fake_info') self.assertEqual(ti._action_obj, dummy)
def test_refreshCatalog(self): site = DummySite('site').__of__(self.root) site._setObject('dummy', DummyContent(catalog=1)) site._setObject('portal_catalog', self._makeOne()) ctool = site.portal_catalog ctool.catalog_object(site.dummy, '/dummy') self.assertEqual(1, len(ctool._catalog.searchResults())) ctool.refreshCatalog(clear=1) self.assertEqual(1, len(ctool._catalog.searchResults()), 'CMF Collector issue #379 (\'Update Catalog\' ' 'fails): %s entries after refreshCatalog' % (len(ctool._catalog.searchResults()),))
def _setupCallTests(self, aliases): # root root = Folder('root') # set up dummy type info with problematic double-default alias ttool = DummyTool() ttool._type_actions = aliases getSiteManager().registerUtility(ttool, ITypesTool) # dummy content and skin root._setObject('dummycontent', DummyContent()) root._setObject('dummy_view', DummyObject()) return root.dummycontent
def test_simulateNestedFolderCloneRemovingUid1(self): self.root._setObject('foo', PortalFolder(id='foo')) foo = self.root.foo foo._setObject('sub1', PortalFolder(id='sub1')) foo.sub1._setObject('sub2', PortalFolder(id='sub2')) foo.sub1.sub2._setObject('baz', DummyContent(id='baz', catalog=1)) baz = foo.sub1.sub2.baz annotation = self.root.portal_uidannotation(baz, UID_ATTRNAME) self.assertEqual(getattr(baz, UID_ATTRNAME), annotation) notify(ObjectAddedEvent(foo, foo)) notify(ObjectClonedEvent(foo)) self.assertRaises(AttributeError, getattr, baz, UID_ATTRNAME)
def setUp(self): from Products.CMFUid.interfaces import IUniqueIdAnnotationManagement SecurityTest.setUp(self) self.uidannotation = self._makeOne() sm = getSiteManager() sm.registerUtility(self.uidannotation, IUniqueIdAnnotationManagement) sm.registerUtility(DummyUniqueIdHandlerTool(), IUniqueIdHandler) self.app._setObject('dummy', DummyContent(id='dummy')) self.app._setObject('site', Folder('site')) transaction.savepoint(optimistic=True)
def setUp(self): from Products.CMFCore.CatalogTool import CatalogTool from Products.CMFUid.UniqueIdAnnotationTool \ import UniqueIdAnnotationTool from Products.CMFUid.UniqueIdGeneratorTool \ import UniqueIdGeneratorTool SecurityTest.setUp(self) self.root._setObject('portal_catalog', CatalogTool()) self.root._setObject('portal_uidgenerator', UniqueIdGeneratorTool()) self.root._setObject('portal_uidannotation', UniqueIdAnnotationTool()) self.root._setObject('portal_uidhandler', self._getTargetClass()()) self.root._setObject('dummy', DummyContent(id='dummy')) self.root._setObject('dummy2', DummyContent(id='dummy2')) sm = getSiteManager() sm.registerUtility(self.root.portal_uidannotation, IUniqueIdAnnotationManagement) sm.registerUtility(self.root.portal_uidgenerator, IUniqueIdGenerator) # Make sure we have our indices/columns uid_name = self.root.portal_uidhandler.UID_ATTRIBUTE_NAME self.root.portal_catalog.addIndex(uid_name, 'FieldIndex') self.root.portal_catalog.addColumn(uid_name)
def test_listActions(self): """test that a full set of context information is passed by the types tool """ from Products.CMFCore.tests.base.dummy import DummyContent tool = self.ttool ti = self._makeDummyTypeInfo() setattr(tool, 'Dummy Content', ti) dummy = self.site._setObject('dummy', DummyContent('dummy')) tool.listActions('fake_info', dummy) self.assertEqual(ti._action_info, 'fake_info') self.assertEqual(ti._action_obj, dummy)
def test_contents_methods(self): sm = getSiteManager(self.site) ttool = self.site._setObject( 'portal_types', TypesTool() ) sm.registerUtility(ttool, ITypesTool) f = self._makeOne('foo') self.assertEqual( f.objectValues(), [] ) self.assertEqual( f.contentIds(), [] ) self.assertEqual( f.contentItems(), [] ) self.assertEqual( f.contentValues(), [] ) self.assertEqual( f.listFolderContents(), [] ) self.assertEqual( f.listDAVObjects(), [] ) f._setObject('sub1', DummyContent('sub1') ) self.assertEqual( f.objectValues(), [f.sub1] ) self.assertEqual( f.contentIds(), [] ) self.assertEqual( f.contentItems(), [] ) self.assertEqual( f.contentValues(), [] ) self.assertEqual( f.listFolderContents(), [] ) self.assertEqual( f.listDAVObjects(), [f.sub1] ) fti = FTIDATA_DUMMY[0].copy() ttool._setObject( 'Dummy Content', FTI(**fti) ) self.assertEqual( f.objectValues(), [f.sub1] ) self.assertEqual( f.contentIds(), ['sub1'] ) self.assertEqual( f.contentItems(), [ ('sub1', f.sub1) ] ) self.assertEqual( f.contentValues(), [f.sub1] ) self.assertEqual( f.listFolderContents(), [f.sub1] ) self.assertEqual( f.listDAVObjects(), [f.sub1] ) f._setObject('hidden_sub2', DummyContent('hidden_sub2') ) self.assertEqual( f.objectValues(), [f.sub1, f.hidden_sub2] ) self.assertEqual( f.contentIds(), ['sub1', 'hidden_sub2'] ) self.assertEqual( f.contentItems(), [ ('sub1', f.sub1), ('hidden_sub2', f.hidden_sub2) ] ) self.assertEqual( f.contentValues(), [f.sub1, f.hidden_sub2] ) self.assertEqual( f.listFolderContents(), [f.sub1] ) self.assertEqual( f.listDAVObjects(), [f.sub1, f.hidden_sub2] )
def test_mergedLocalRolesManipulation(self): # The _mergedLocalRoles function used to return references to # actual local role settings and it was possible to manipulate them # by changing the return value. http://www.zope.org/Collectors/CMF/376 from Products.CMFCore.tests.base.dummy import DummyContent from Products.CMFCore.utils import _mergedLocalRoles obj = DummyContent() obj.manage_addLocalRoles('dummyuser1', ['Manager', 'Owner']) self.assertEqual(len(obj.get_local_roles_for_userid('dummyuser1')), 2) merged_roles = _mergedLocalRoles(obj) merged_roles['dummyuser1'].append('FOO') # The values on the object itself should still the the same self.assertEqual(len(obj.get_local_roles_for_userid('dummyuser1')), 2)
def test_checkTransitionGuard(self): wtool = self.wtool wf = self._getDummyWorkflow() dummy = self.site._setObject( 'dummy', DummyContent() ) wtool.notifyCreated(dummy) self.assertEqual( wf._getStatusOf(dummy), {'state': 'private', 'comments': ''} ) # Check self.assert_(wf._checkTransitionGuard(wf.transitions['publish'], dummy)) # Check with kwargs propagation self.assert_(wf._checkTransitionGuard(wf.transitions['publish'], dummy, arg1=1, arg2=2))