def test_tracker261(self): # # Tracker issue #261 says that content in a deleted folder # is not being uncatalogued. Try creating a subfolder with # content object, and test. # self.root._setObject('test', PortalFolder('test', '')) test = self.root.test self.root._setObject('portal_catalog', CatalogTool()) catalog = self.root.portal_catalog assert len(catalog) == 0 test._setObject('sub', PortalFolder('sub', '')) sub = test.sub sub._setObject('foo', DummyContent('foo', 1)) foo = sub.foo assert foo.after_add_called assert not foo.before_delete_called assert len(catalog) == 1 foo.reset() test.manage_delObjects(ids=['sub']) assert not foo.after_add_called assert foo.before_delete_called assert len(catalog) == 0
def test_manageDelObjects( self ): test = PortalFolder( 'test', '' ) self.root._setObject( 'test', test ) 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 test_folderMove(self): # # Does the catalog stay synched when folders are moved? # self.root._setObject('test', PortalFolder('test', '')) test = self.root.test self.root._setObject('portal_types', TypesTool()) types_tool = self.root.portal_types self.root._setObject('portal_catalog', CatalogTool()) catalog = self.root.portal_catalog assert len(catalog) == 0 test._setObject('folder', PortalFolder('folder', '')) folder = test.folder folder._setObject('sub', PortalFolder('sub', '')) sub = folder.sub sub._setObject('foo', DummyContent('foo', 1)) foo = sub.foo assert len(catalog) == 1 assert 'foo' in catalog.uniqueValuesFor('id') assert has_path(catalog._catalog, '/test/folder/sub/foo') #import pdb; pdb.set_trace() folder.manage_renameObject(id='sub', new_id='new_sub') assert 'foo' in catalog.uniqueValuesFor('id') assert len(catalog) == 1 assert has_path(catalog._catalog, '/test/folder/new_sub/foo') folder._setObject('bar', DummyContent('bar', 1)) bar = folder.bar assert 'bar' in catalog.uniqueValuesFor('id') assert len(catalog) == 2 assert has_path(catalog._catalog, '/test/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()) cookie = folder.manage_cutObjects(ids=['bar']) sub2.manage_pasteObjects(cookie) assert 'foo' in catalog.uniqueValuesFor('id') assert 'bar' in catalog.uniqueValuesFor('id') assert len(catalog) == 2 assert has_path(catalog._catalog, '/test/folder/sub2/bar')
def test_manageAddFolder(self): # # Does MKDIR/MKCOL intercept work? # test = PortalFolder('test', '') test._setPortalTypeName('Folder') self.root._setObject('test', test) self.root.reindexObject = lambda: 0 test = self.root.test self.root._setObject('portal_types', TypesTool()) types_tool = self.root.portal_types FTI = FactoryTypeInformation types_tool._setObject( 'Folder', FTI(id='Folder', meta_type=PortalFolder.meta_type, product='CMFCore', factory='manage_addPortalFolder')) types_tool._setObject( 'Grabbed', FTI('Grabbed', meta_type=PortalFolder.meta_type, product='CMFCore', factory='manage_addPortalFolder')) # First, test default behavior test.manage_addFolder(id='simple', title='Simple') self.assertEqual(test.simple.Type(), 'Folder') self.assertEqual(test.simple.getId(), 'simple') self.assertEqual(test.simple.Title(), 'Simple') # Now, test overridden behavior types_tool.Folder.addAction(id='mkdir', name='MKDIR handler', action='grabbed', permission='', category='folder', visible=0) class Grabbed: _grabbed_with = None def __init__(self, context): self._context = context def __call__(self, id): self._grabbed_with = id self._context._setOb(id, PortalFolder(id)) self._context._getOb(id)._setPortalTypeName('Grabbed') self.root.grabbed = Grabbed(test) test.manage_addFolder(id='indirect', title='Indirect') self.assertEqual(test.indirect.Type(), 'Grabbed') self.assertEqual(test.indirect.getId(), 'indirect') self.assertEqual(test.indirect.Title(), 'Indirect')
def test_catalogUnindexAndIndex(self): # # Test is a new object does get cataloged upon _setObject # and uncataloged upon manage_deleteObjects # self.root._setObject('test', PortalFolder('test', '')) test = self.root.test self.root._setObject('portal_types', TypesTool()) types_tool = self.root.portal_types self.root._setObject('portal_catalog', CatalogTool()) catalog = self.root.portal_catalog assert len(catalog) == 0 test._setObject('foo', DummyContent('foo', 1)) foo = test.foo assert foo.after_add_called assert not foo.before_delete_called assert len(catalog) == 1 foo.reset() test._delObject('foo') assert not foo.after_add_called assert foo.before_delete_called assert len(catalog) == 0
def test_manageAddFolder( self ): # # Does MKDIR/MKCOL intercept work? # test = PortalFolder( 'test', '' ) test._setPortalTypeName( 'Folder' ) self.root._setObject( 'test', test ) self.root.reindexObject = lambda: 0 test = self.root.test self.root._setObject( 'portal_types', TypesTool() ) types_tool = self.root.portal_types FTI = FactoryTypeInformation types_tool._setObject( 'Folder' , FTI( id='Folder' , meta_type=PortalFolder.meta_type , product='CMFCore' , factory='manage_addPortalFolder' ) ) types_tool._setObject( 'Grabbed' , FTI( 'Grabbed' , meta_type=PortalFolder.meta_type , product='CMFCore' , factory='manage_addPortalFolder' ) ) # First, test default behavior test.manage_addFolder( id='simple', title='Simple' ) self.assertEqual( test.simple.Type(), 'Folder' ) self.assertEqual( test.simple.getId(), 'simple' ) self.assertEqual( test.simple.Title(), 'Simple' ) # Now, test overridden behavior types_tool.Folder.addAction( id = 'mkdir' , name = 'MKDIR handler' , action = 'grabbed' , permission = '' , category = 'folder' , visible = 0 ) class Grabbed: _grabbed_with = None def __init__( self, context ): self._context = context def __call__( self, id ): self._grabbed_with = id self._context._setOb( id, PortalFolder( id ) ) self._context._getOb( id )._setPortalTypeName( 'Grabbed' ) self.root.grabbed = Grabbed( test ) test.manage_addFolder( id='indirect', title='Indirect' ) self.assertEqual( test.indirect.Type(), 'Grabbed' ) self.assertEqual( test.indirect.getId(), 'indirect' ) self.assertEqual( test.indirect.Title(), 'Indirect' )
def test_otherFolderTypes(self): """ Does 'invokeFactory' work when invoked from non-PortalFolder? """ self.root._setObject('portal', PortalFolder('portal', '')) portal = self.root.portal portal._setObject('normal', OFS.Folder.Folder('normal', '')) normal = portal.normal normal.invokeFactory('Dummy', 'dummy') assert 'dummy' not in portal.objectIds() assert 'dummy' in normal.objectIds()
def setUp(self): get_transaction().begin() self._policy = UnitTestSecurityPolicy() self._oldPolicy = SecurityManager.setSecurityPolicy(self._policy) self.connection = Zope.DB.open() self.root = self.connection.root()['Application'] self.manager = UnitTestUser().__of__(self.root) self.member = LimitedUnitTestUser().__of__(self.root) self.root._setObject('folder', PortalFolder('folder', '')) self.folder = self.root.folder self.folder._setObject('doc1', DummyContent('doc1')) self.folder._setObject('doc2', DummyContent('doc2')) self.folder._setObject('doc3', DummyContent('doc3'))
def off_test_otherFolderTypes(self): """ Does 'invokeFactory' work when invoked from non-PortalFolder? Currently tests a bug which hasn't been fixed (remove 'off_' from name to activate) """ self.root._setObject('portal', PortalFolder('portal', '')) portal = self.root.portal portal._setObject('normal', OFS.Folder.Folder('normal', '')) normal = portal.normal normal.invokeFactory('Dummy', 'dummy') assert 'dummy' not in portal.objectIds() assert 'dummy' in normal.objectIds()
def test_deletePropagation(self): test = PortalFolder('test', '') self.root._setObject('test', test) test = self.root.test foo = DummyContent('foo') foo.reset() assert not foo.after_add_called assert not foo.before_delete_called test._setObject('foo', foo) assert foo.after_add_called assert not foo.before_delete_called foo.reset() test._delObject('foo') assert not foo.after_add_called assert foo.before_delete_called foo.reset() test._setObject('foo', foo) test._delOb('foo') # doesn't propagate assert foo.after_add_called assert not foo.before_delete_called
def test_manageDelObjects(self): test = PortalFolder('test', '') self.root._setObject('test', test) 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 test_deletePropagation( self ): test = PortalFolder( 'test', '' ) self.root._setObject( 'test', test ) test = self.root.test foo = DummyContent( 'foo' ) foo.reset() assert not foo.after_add_called assert not foo.before_delete_called test._setObject( 'foo', foo ) assert foo.after_add_called assert not foo.before_delete_called foo.reset() test._delObject( 'foo' ) assert not foo.after_add_called assert foo.before_delete_called foo.reset() test._setObject( 'foo', foo ) test._delOb( 'foo' ) # doesn't propagate assert foo.after_add_called assert not foo.before_delete_called
def test_processActions(self): """ Are the correct, permitted methods returned for actions? """ self.root._setObject('portal', PortalFolder('portal', '')) portal = self.root.portal portal.invokeFactory('Dummy', 'actions_dummy') dummy = portal._getOb('actions_dummy') # so we can traverse to it: dummy.view = DummyMethod("view") dummy.view2 = DummyMethod("view2") dummy.edit = DummyMethod("edit") default_view = dummy() custom_view = utils._getViewFor(dummy, view='view2')() unpermitted_view = utils._getViewFor(dummy, view='edit')() assert default_view == 'view' assert custom_view == 'view2' assert unpermitted_view != 'edit' assert unpermitted_view == 'view'
def __call__(self, id): self._grabbed_with = id self._context._setOb(id, PortalFolder(id)) self._context._getOb(id)._setPortalTypeName('Grabbed')
def setupMembersFolder(self, p): PortalFolder.manage_addPortalFolder(p, 'Members') p.Members.manage_addProduct['OFSP'].manage_addDTMLMethod( 'index_html', 'Member list', '<dtml-return roster>')
def test_contentPaste(self): # # Does copy / paste work? # #import pdb; pdb.set_trace() test = PortalFolder('test', '') self.root._setObject('test', test) test = self.root.test self.root._setObject('portal_types', TypesTool()) types_tool = self.root.portal_types FTI = FactoryTypeInformation types_tool._setObject( 'Dummy', FTI('Dummy', meta_type=DummyContent.meta_type, product='OFSP', factory='addDTMLDocument')) self.root._setObject('portal_catalog', CatalogTool()) catalog = self.root.portal_catalog assert len(catalog) == 0 test._setObject('sub1', PortalFolder('sub1', '')) sub1 = test.sub1 test._setObject('sub2', PortalFolder('sub2', '')) sub2 = test.sub2 test._setObject('sub3', PortalFolder('sub3', '')) sub3 = test.sub3 sub1._setObject('dummy', DummyContent('dummy', 1)) assert 'dummy' in sub1.objectIds() assert 'dummy' in sub1.contentIds() assert not 'dummy' in sub2.objectIds() assert not 'dummy' in sub2.contentIds() assert not 'dummy' in sub3.objectIds() assert not 'dummy' in sub3.contentIds() assert has_path(catalog._catalog, '/test/sub1/dummy') assert not has_path(catalog._catalog, '/test/sub2/dummy') assert not has_path(catalog._catalog, '/test/sub3/dummy') cookie = sub1.manage_copyObjects(ids=('dummy', )) # Waaa! force sub2 to allow paste of Dummy object. #import pdb; pdb.set_trace() sub2.all_meta_types = [] sub2.all_meta_types.extend(sub2.all_meta_types) sub2.all_meta_types.extend(extra_meta_types()) sub2.manage_pasteObjects(cookie) assert 'dummy' in sub1.objectIds() assert 'dummy' in sub1.contentIds() assert 'dummy' in sub2.objectIds() assert 'dummy' in sub2.contentIds() assert not 'dummy' in sub3.objectIds() assert not 'dummy' in sub3.contentIds() assert has_path(catalog._catalog, '/test/sub1/dummy') assert has_path(catalog._catalog, '/test/sub2/dummy') assert not has_path(catalog._catalog, '/test/sub3/dummy') cookie = sub1.manage_cutObjects(ids=('dummy', )) # Waaa! force sub2 to allow paste of Dummy object. sub3.all_meta_types = [] sub3.all_meta_types.extend(sub3.all_meta_types) sub3.all_meta_types.extend(extra_meta_types()) sub3.manage_pasteObjects(cookie) assert not 'dummy' in sub1.objectIds() assert not 'dummy' in sub1.contentIds() assert 'dummy' in sub2.objectIds() assert 'dummy' in sub2.contentIds() assert 'dummy' in sub3.objectIds() assert 'dummy' in sub3.contentIds() assert not has_path(catalog._catalog, '/test/sub1/dummy') assert has_path(catalog._catalog, '/test/sub2/dummy') assert has_path(catalog._catalog, '/test/sub3/dummy')
def test_contentPaste( self ): # # Does copy / paste work? # #import pdb; pdb.set_trace() test = PortalFolder( 'test', '' ) self.root._setObject( 'test', test ) test = self.root.test self.root._setObject( 'portal_types', TypesTool() ) types_tool = self.root.portal_types FTI = FactoryTypeInformation types_tool._setObject( 'Dummy' , FTI( 'Dummy' , meta_type=DummyContent.meta_type , product='OFSP' , factory='addDTMLDocument' ) ) self.root._setObject( 'portal_catalog', CatalogTool() ) catalog = self.root.portal_catalog assert len( catalog ) == 0 test._setObject( 'sub1', PortalFolder( 'sub1', '' ) ) sub1 = test.sub1 test._setObject( 'sub2', PortalFolder( 'sub2', '' ) ) sub2 = test.sub2 test._setObject( 'sub3', PortalFolder( 'sub3', '' ) ) sub3 = test.sub3 sub1._setObject( 'dummy', DummyContent( 'dummy', 1 ) ) assert 'dummy' in sub1.objectIds() assert 'dummy' in sub1.contentIds() assert not 'dummy' in sub2.objectIds() assert not 'dummy' in sub2.contentIds() assert not 'dummy' in sub3.objectIds() assert not 'dummy' in sub3.contentIds() assert has_path( catalog._catalog, '/test/sub1/dummy' ) assert not has_path( catalog._catalog, '/test/sub2/dummy' ) assert not has_path( catalog._catalog, '/test/sub3/dummy' ) cookie = sub1.manage_copyObjects( ids = ( 'dummy', ) ) # Waaa! force sub2 to allow paste of Dummy object. #import pdb; pdb.set_trace() sub2.all_meta_types = sub2.all_meta_types() + extra_meta_types() sub2.manage_pasteObjects( cookie ) assert 'dummy' in sub1.objectIds() assert 'dummy' in sub1.contentIds() assert 'dummy' in sub2.objectIds() assert 'dummy' in sub2.contentIds() assert not 'dummy' in sub3.objectIds() assert not 'dummy' in sub3.contentIds() assert has_path( catalog._catalog, '/test/sub1/dummy' ) assert has_path( catalog._catalog, '/test/sub2/dummy' ) assert not has_path( catalog._catalog, '/test/sub3/dummy' ) cookie = sub1.manage_cutObjects( ids = ( 'dummy', ) ) # Waaa! force sub2 to allow paste of Dummy object. sub3.all_meta_types = sub3.all_meta_types() + extra_meta_types() sub3.manage_pasteObjects( cookie ) assert not 'dummy' in sub1.objectIds() assert not 'dummy' in sub1.contentIds() assert 'dummy' in sub2.objectIds() assert 'dummy' in sub2.contentIds() assert 'dummy' in sub3.objectIds() assert 'dummy' in sub3.contentIds() assert not has_path( catalog._catalog, '/test/sub1/dummy' ) assert has_path( catalog._catalog, '/test/sub2/dummy' ) assert has_path( catalog._catalog, '/test/sub3/dummy' )