def _makeFolder(id, site_folder=False): from Products.CMFCore.PortalFolder import PortalFolder from Products.CMFCore.TypesTool import TypesTool from Products.CMFCore.tests.base.dummy import DummyType class _TypeInfo(DummyType): def _getId(self): return self._id def constructInstance(self, container, id, *args, **kw): portal_type = self._getId() if portal_type == TEST_FOLDER: content = PortalFolder(id) elif portal_type == TEST_CONTENT: content = _makeItem() content._setId(id) elif portal_type == TEST_INI_AWARE: content = _makeINIAware(id) elif portal_type == TEST_CSV_AWARE: content = _makeCSVAware(id) else: raise ValueError, 'Ugh' content.portal_type = portal_type container._setObject(id, content) return container._getOb(id) folder = PortalFolder(id) folder.portal_type = TEST_FOLDER if site_folder: tool = folder.portal_types = TypesTool() tool._setObject(TEST_CSV_AWARE, _TypeInfo(TEST_CSV_AWARE)) tool._setObject(TEST_INI_AWARE, _TypeInfo(TEST_INI_AWARE)) tool._setObject(TEST_CONTENT, _TypeInfo(TEST_CONTENT)) tool._setObject(TEST_FOLDER, _TypeInfo(TEST_FOLDER)) return folder
def manage_beforeDelete(self, item, container): " Remove self from the workflow and catalog. " # We don't call PortalContent.manage_beforeDelete because # it deals with talkbacks which are subobjects... # Remove self from catalog if aq_base(container) is not aq_base(self): self.unindexObject() # Then recurse in the children (ObjectManager) PortalFolder.manage_beforeDelete(self, item, container)
def setUp(self): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) self.folder = api.content.create(type='Folder', container=self.portal, id='folder') self.folder.skos = [ self.term, ] self.folder.reindexObject() self.sub_folder = api.content.create(type='Folder', container=self.folder, id='sub_folder') self.document = api.content.create(type='Document', container=self.folder, id='a_document') self.document.setSubject([ 'Bar', ]) self.document.reindexObject() o = PortalContent('cmf', 'CMF Content', '', '', '') self.folder._setObject('cmf', o, suppress_events=True) o = PortalFolder('cmf_folder', 'CMF Folder', '') self.folder._setObject('cmf_folder', o, suppress_events=True) o = PortalContent('cmf', 'CMF Content', '', '', '') self.folder['cmf_folder']._setObject('cmf', o, suppress_events=True)
def constructInstance(self, container, id, *args, **kw): portal_type = self._getId() if portal_type == TEST_FOLDER: content = PortalFolder(id) elif portal_type == TEST_CONTENT: content = _makeItem() content._setId(id) elif portal_type == TEST_INI_AWARE: content = _makeINIAware(id) elif portal_type == TEST_CSV_AWARE: content = _makeCSVAware(id) else: raise ValueError, 'Ugh' content.portal_type = portal_type container._setObject(id, content) return container._getOb(id)
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. # from Products.CMFCore.PortalFolder import PortalFolder test = self._makeOne('test') ttool = self.site._setObject( 'portal_types', TypesTool() ) ctool = self.site._setObject( 'portal_catalog', CatalogTool() ) self.assertEqual( len(ctool), 0 ) test._setObject( 'sub', PortalFolder( 'sub', '' ) ) sub = test.sub sub._setObject( 'foo', DummyContent( 'foo', catalog=1 ) ) foo = sub.foo self.failUnless( foo.after_add_called ) self.failIf( foo.before_delete_called ) self.assertEqual( len(ctool), 1 ) foo.reset() test.manage_delObjects( ids=['sub'] ) self.failIf( foo.after_add_called ) self.failUnless( foo.before_delete_called ) self.assertEqual( len(ctool), 0 )
def test_createMemberArea(self): site = self._makeSite() mtool = site.portal_membership members = site._setObject('Members', PortalFolder('Members')) acl_users = site._setObject('acl_users', DummyUserFolder()) wtool = site._setObject('portal_workflow', DummyTool()) # permission mtool.createMemberArea('user_foo') self.failIf(hasattr(members.aq_self, 'user_foo')) newSecurityManager(None, acl_users.user_bar) mtool.createMemberArea('user_foo') self.failIf(hasattr(members.aq_self, 'user_foo')) newSecurityManager(None, acl_users.user_foo) mtool.setMemberareaCreationFlag() mtool.createMemberArea('user_foo') self.failIf(hasattr(members.aq_self, 'user_foo')) newSecurityManager(None, acl_users.all_powerful_Oz) mtool.setMemberareaCreationFlag() mtool.createMemberArea('user_foo') self.failUnless(hasattr(members.aq_self, 'user_foo')) # default content f = members.user_foo ownership = acl_users.user_foo localroles = (('user_foo', ('Owner', )), ) self.assertEqual(f.getOwner(), ownership) self.assertEqual( f.get_local_roles(), localroles, 'CMF Collector issue #162 (LocalRoles broken): %s' % str(f.get_local_roles()))
def test_constructContent_simple_STI(self): from AccessControl import Unauthorized from AccessControl.SecurityManagement import newSecurityManager from AccessControl.SecurityManager import setSecurityPolicy from Products.CMFCore.PortalFolder import PortalFolder from Products.CMFCore.TypesTool \ import ScriptableTypeInformation as STI from Products.CMFCore.tests.base.dummy import DummyFactoryDispatcher from Products.CMFCore.tests.base.tidata import STI_SCRIPT from Products.PythonScripts.PythonScript import PythonScript site = self._makeSite().__of__(self.root) acl_users = site.acl_users setSecurityPolicy(self._oldPolicy) newSecurityManager(None, acl_users.all_powerful_Oz) tool = self._makeOne().__of__(site) sti_baz = STI('Baz', permission='Add portal content', constructor_path='addBaz') tool._setObject('Baz', sti_baz) script = PythonScript('addBaz') script.write(STI_SCRIPT) tool._setObject('addBaz', script) folder = site._setObject( 'folder', PortalFolder(id='folder') ) folder.manage_addProduct = {'FooProduct': DummyFactoryDispatcher(folder) } folder._owner = (['acl_users'], 'user_foo') self.assertEqual( folder.getOwner(), acl_users.user_foo ) try: tool.constructContent('Baz', container=folder, id='page2') except Unauthorized: self.fail('CMF Collector issue #165 (Ownership bug): ' 'Unauthorized raised' ) self.assertEqual(folder.page2.portal_type, 'Baz')
def test_getSyndicatableContent(self): # http://www.zope.org/Collectors/CMF/369 # Make sure we use a suitable base class call when determining # syndicatable content try: # This test only makes sense if CMFBTreeFolder is installed, # which depends on the BTreeFolder2 product, which might not # always be available. from Products.CMFCore import CMFBTreeFolder except ImportError: return from Products.CMFCore.PortalFolder import PortalFolder from Products.CMFCore.CMFBTreeFolder import CMFBTreeFolder from Products.CMFCore.TypesTool import TypesTool PERIOD = 'hourly' FREQUENCY = 4 NOW = DateTime() MAX_ITEMS = 42 self.root._setObject( 'portal_types', TypesTool() ) self.root._setObject('pf', PortalFolder('pf')) self.root._setObject('bf', CMFBTreeFolder('bf')) self.root._setObject('portal_syndication', self._makeOne()) tool = self.root.portal_syndication tool.editProperties(updatePeriod=PERIOD, updateFrequency=FREQUENCY, updateBase=NOW, isAllowed=True, max_items=MAX_ITEMS, ) self.assertEqual(len(tool.getSyndicatableContent(self.root.pf)), 0) self.assertEqual(len(tool.getSyndicatableContent(self.root.bf)), 0)
def test_constructContent(self): from Products.CMFCore.TypesTool \ import ScriptableTypeInformation as STI site = self.site acl_users = self.acl_users ttool = self.ttool setSecurityPolicy(self._oldPolicy) newSecurityManager(None, acl_users.all_powerful_Oz) self.site._owner = (['acl_users'], 'all_powerful_Oz') sti_baz = STI('Baz', permission='Add portal content', constructor_path='addBaz') ttool._setObject('Baz', sti_baz) ttool._setObject('addBaz', PythonScript('addBaz')) s = ttool.addBaz s.write(STI_SCRIPT) f = site._setObject('folder', PortalFolder(id='folder')) f.manage_addProduct = {'FooProduct': DummyFactory(f)} f._owner = (['acl_users'], 'user_foo') self.assertEqual(f.getOwner(), acl_users.user_foo) ttool.constructContent('Dummy Content', container=f, id='page1') try: ttool.constructContent('Baz', container=f, id='page2') except Unauthorized: self.fail('CMF Collector issue #165 (Ownership bug): ' 'Unauthorized raised')
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. # from Products.CMFCore.PortalFolder import PortalFolder acl_users = self.site._setObject('acl_users', DummyUserFolder()) newSecurityManager(None, acl_users.all_powerful_Oz) test = self._makeOne('test') ctool = DummyCatalogTool() getSiteManager().registerUtility(ctool, ICatalogTool) self.assertEqual(len(ctool), 0) test._setObject('sub', PortalFolder('sub', '')) sub = test.sub sub._setObject('foo', DummyContent('foo', catalog=1)) foo = sub.foo self.assertTrue(foo.after_add_called) self.assertFalse(foo.before_delete_called) self.assertEqual(len(ctool), 1) foo.reset() test._delObject('sub') self.assertFalse(foo.after_add_called) self.assertTrue(foo.before_delete_called) self.assertEqual(len(ctool), 0)
def setUp( self ): SecurityTest.setUp(self) root = self.root try: root._delObject('test') except AttributeError: pass root._setObject( 'test', PortalFolder( 'test','' ) )
def test_getSyndicatableContent(self): # http://www.zope.org/Collectors/CMF/369 # Make sure we use a suitable base class call when determining # syndicatable content from Products.CMFCore.PortalFolder import PortalFolder from Products.CMFCore.CMFBTreeFolder import CMFBTreeFolder from Products.CMFCore.TypesTool import TypesTool PERIOD = 'hourly' FREQUENCY = 4 NOW = datetime.now() MAX_ITEMS = 42 getSiteManager().registerUtility(TypesTool(), ITypesTool) self.app._setObject('pf', PortalFolder('pf')) self.app._setObject('bf', CMFBTreeFolder('bf')) tool = self._makeOne() tool.period = PERIOD tool.frequency = FREQUENCY tool.base = NOW tool.enable() tool.max_items = MAX_ITEMS self.assertEqual(len(tool.getSyndicatableContent(self.app.pf)), 0) self.assertEqual(len(tool.getSyndicatableContent(self.app.bf)), 0)
def test_deleteMembersUnsupported(self): # Quite a few user folders do not support the deletion API # http://www.zope.org/Collectors/CMF/481 # Make sure we get the right exception site = self._makeSite() sm = getSiteManager() sm.registerUtility(site, ISiteRoot) mtool = site.portal_membership members = site._setObject('Members', PortalFolder('Members')) acl_users = site._setObject('acl_users', DummyUserFolder()) mdtool = MemberDataTool() sm.registerUtility(mdtool, IMemberDataTool) newSecurityManager(None, acl_users.all_powerful_Oz) self.assertEqual(acl_users.getUserById('user_foo'), acl_users.user_foo) mtool.createMemberArea('user_foo') self.assertTrue(hasattr(members.aq_self, 'user_foo')) mdtool.registerMemberData('Dummy', 'user_foo') self.assertTrue('user_foo' in mdtool._members) # Fake an incompatible user folder by deleting the class method deletion_method = DummyUserFolder.userFolderDelUsers del DummyUserFolder.userFolderDelUsers self.assertRaises(NotImplementedError, mtool.deleteMembers, ('user_foo', )) self.assertTrue(acl_users.getUserById('user_foo', None)) self.assertTrue('user_foo' in mdtool._members) self.assertTrue(hasattr(members.aq_self, 'user_foo')) # Cleanup DummyUserFolder.userFolderDelUsers = deletion_method
def test_deleteMembers(self): site = self._makeSite() sm = getSiteManager() mtool = site.portal_membership members = site._setObject('Members', PortalFolder('Members')) acl_users = site._setObject('acl_users', DummyUserFolder()) utool = site._setObject('portal_url', DummyTool()) sm.registerUtility(utool, IURLTool) wtool = site._setObject('portal_workflow', DummyTool()) mdtool = site._setObject('portal_memberdata', MemberDataTool()) sm.registerUtility(mdtool, IMemberDataTool) newSecurityManager(None, acl_users.all_powerful_Oz) self.assertEqual(acl_users.getUserById('user_foo'), acl_users.user_foo) mtool.createMemberArea('user_foo') self.failUnless(hasattr(members.aq_self, 'user_foo')) mdtool.registerMemberData('Dummy', 'user_foo') self.failUnless(mdtool._members.has_key('user_foo')) rval = mtool.deleteMembers(('user_foo', 'user_baz')) self.assertEqual(rval, ('user_foo', )) self.failIf(acl_users.getUserById('user_foo', None)) self.failIf(mdtool._members.has_key('user_foo')) self.failIf(hasattr(members.aq_self, 'user_foo')) cleanUp()
def test_HomeFolder_methods(self): from Products.CMFCore.interfaces import IMembershipTool mtool = getSiteManager().getUtility(IMembershipTool) setRequest(self.REQUEST) self.assertEqual(mtool.getHomeFolder(id='member_foo'), None) self.assertEqual(mtool.getHomeUrl(id='member_foo'), None) self.site._setObject('Members', PortalFolder('Members')) self.assertEqual(mtool.getHomeFolder(id='member_foo'), None) self.assertEqual(mtool.getHomeUrl(id='member_foo'), None) self.site.Members._setObject('member_foo', PortalFolder('member_foo')) self.assertEqual(mtool.getHomeFolder(id='member_foo'), self.site.Members.member_foo) self.assertEqual(mtool.getHomeUrl(id='member_foo'), 'http://nohost/bar/site/Members/member_foo') clearRequest()
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. # 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('sub', PortalFolder('sub', '')) sub = test.sub sub._setObject('foo', DummyContent('foo', catalog=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_move_cant_delete_source(self): # # This test fails on Zope's earlier than 2.7.3 because of the # changes required to 'OFS.CopytSupport.manage_pasteObjects' # which must pass 'validate_src' of 2 to '_verifyObjectPaste' # to indicate that the object is being moved, rather than # simply copied. # # If you are running with such a Zope, this test will fail, # because the move (which should raise Unauthorized) will be # allowed. # from AccessControl.Permissions import delete_objects as DeleteObjects from Products.CMFCore.PortalFolder import PortalFolder folder1, folder2 = self._initFolders() folder1.manage_permission(DeleteObjects, roles=(), acquire=0) folder1._setObject('sub', PortalFolder('sub')) transaction.savepoint(optimistic=True) # get a _p_jar for 'sub' self.app.portal_types = DummyTypesTool() def _no_delete_objects(permission, object, context): return permission != DeleteObjects self._initPolicyAndUser(c_lambda=_no_delete_objects) cookie = folder1.manage_cutObjects(ids=('sub', )) self._assertCopyErrorUnauth(folder2.manage_pasteObjects, cookie, ce_regex='Insufficient Privileges' + '.*%s' % DeleteObjects)
def test_getSyndicatableContent(self): # http://www.zope.org/Collectors/CMF/369 # Make sure we use a suitable base class call when determining # syndicatable content from Products.CMFCore.PortalFolder import PortalFolder from Products.CMFCore.CMFBTreeFolder import CMFBTreeFolder from Products.CMFCore.TypesTool import TypesTool PERIOD = 'hourly' FREQUENCY = 4 NOW = DateTime() MAX_ITEMS = 42 self.root._setObject('portal_types', TypesTool()) self.root._setObject('pf', PortalFolder('pf')) self.root._setObject('bf', CMFBTreeFolder('bf')) self.root._setObject('portal_syndication', self._makeOne()) tool = self.root.portal_syndication tool.editProperties( updatePeriod=PERIOD, updateFrequency=FREQUENCY, updateBase=NOW, isAllowed=True, max_items=MAX_ITEMS, ) self.assertEqual(len(tool.getSyndicatableContent(self.root.pf)), 0) self.assertEqual(len(tool.getSyndicatableContent(self.root.bf)), 0)
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', CatalogTool() ) ctool.addIndex('getId', 'FieldIndex') 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( 'foo' in ctool.uniqueValuesFor('getId') ) self.failUnless( has_path(ctool._catalog, '/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( 'foo' in ctool.uniqueValuesFor('getId') ) self.failUnless( has_path(ctool._catalog, '/bar/site/folder/new_sub/foo') ) folder._setObject( 'bar', DummyContent( 'bar', catalog=1 ) ) self.assertEqual( len(ctool), 2 ) self.failUnless( 'bar' in ctool.uniqueValuesFor('getId') ) self.failUnless( has_path(ctool._catalog, '/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( 'foo' in ctool.uniqueValuesFor('getId') ) self.failUnless( 'bar' in ctool.uniqueValuesFor('getId') ) self.assertEqual( len(ctool), 2 ) self.failUnless( has_path(ctool._catalog, '/bar/site/folder/sub2/bar') )
def test_folderMove(self): # # Does the catalog stay synched when folders are moved? # from Products.CMFCore.PortalFolder import PortalFolder acl_users = self.site._setObject('acl_users', DummyUserFolder()) newSecurityManager(None, acl_users.all_powerful_Oz) ctool = DummyCatalogTool() sm = getSiteManager() sm.registerUtility(TypesTool(), ITypesTool) sm.registerUtility(ctool, ICatalogTool) 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.assertTrue(has_id(ctool, 'foo')) self.assertTrue(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.assertTrue(has_id(ctool, 'foo')) self.assertTrue(has_path(ctool, '/bar/site/folder/new_sub/foo')) folder._setObject('bar', DummyContent('bar', catalog=1)) self.assertEqual(len(ctool), 2) self.assertTrue(has_id(ctool, 'bar')) self.assertTrue(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.assertTrue(has_id(ctool, 'foo')) self.assertTrue(has_id(ctool, 'bar')) self.assertEqual(len(ctool), 2) self.assertTrue(has_path(ctool, '/bar/site/folder/sub2/bar'))
def setUp( self ): from Products.CMFCore.PortalFolder import PortalFolder SecurityTest.setUp(self) root = self.root try: root._delObject('test') except AttributeError: pass root._setObject( 'test', PortalFolder( 'test','' ) )
def setUp(self): super(FunctionalUpgradeTestCase, self).setUp() sm = getSiteManager() sm.registerAdapter(SyndicationInfo, [IFolderish], ISyndicationInfo) syndication = SyndicationTool() sm.registerUtility(syndication, ISyndicationTool) folder = PortalFolder("Dummy Portal Folder") self.folder = folder
def manage_addPortalFolder(self, id, title='', REQUEST=None): """Add a new PortalFolder object with id *id*. """ ob = PortalFolder(id, title) self._setObject(id, ob, suppress_events=True) if REQUEST is not None: return self.folder_contents( # XXX: ick! self, REQUEST, portal_status_message="Folder added")
def getSyndicatableContent(self, obj): """ An interface for allowing folderish items to implement an equivalent of PortalFolder.contentValues() """ if hasattr(obj, 'synContentValues'): values = obj.synContentValues() else: values = PortalFolder.contentValues(obj) return values
def _makeOne(self): from zope.interface import alsoProvides from Products.CMFCore.PortalFolder import PortalFolder folder = PortalFolder('folder') self.portal._setObject('folder', folder) alsoProvides(folder, IAnnotations) return self._getTargetClass()(folder)
def setUp(self): """Setup a site""" self.site = site = DummySite('site') sm = getSiteManager() sm.registerUtility(DummyTool(), IMembershipTool) sm.registerUtility(DummyTool().__of__(site), IPropertiesTool) sm.registerUtility(DummyTool().__of__(site), IURLTool) sm.registerUtility(DummyTool(), ITypesTool) folder = PortalFolder('test_folder') self.folder = site._setObject('test_folder', folder)
def setUp(self): from zope.annotation.attribute import AttributeAnnotations from Products.CMFCore.interfaces import IFolderish from Products.CMFCore.PortalFolder import PortalFolder super(SyndicationInfoTests, self).setUp() self.app._setObject('portal', PortalFolder('portal')) self.portal = self.app.portal self.syndtool = DummySyndicationTool() sm = getSiteManager() sm.registerUtility(self.syndtool, ISyndicationTool) sm.registerAdapter(AttributeAnnotations, [IFolderish], IAnnotations)
def _makeFolder(id, site_folder=False): from zope.interface import directlyProvides from zope.interface import providedBy from Products.CMFCore.PortalFolder import PortalFolder from Products.CMFCore.interfaces import ISiteRoot from Products.CMFCore.TypesTool import TypesTool from Products.CMFCore.tests.base.dummy import DummyType class _TypeInfo(DummyType): def _getId(self): return self._id def constructInstance(self, container, id, *args, **kw): portal_type = self._getId() if portal_type == TEST_FOLDER: content = PortalFolder(id) elif portal_type == TEST_CONTENT: content = _makeItem() content._setId(id) elif portal_type == TEST_INI_AWARE: content = _makeINIAware(id) elif portal_type == TEST_CSV_AWARE: content = _makeCSVAware(id) else: raise ValueError, 'Ugh' content.portal_type = portal_type container._setObject(id, content) return container._getOb(id) folder = PortalFolder(id) folder.portal_type = TEST_FOLDER if site_folder: directlyProvides(folder, ISiteRoot + providedBy(folder)) tool = folder.portal_types = TypesTool() tool._setObject(TEST_CSV_AWARE, _TypeInfo(TEST_CSV_AWARE)) tool._setObject(TEST_INI_AWARE, _TypeInfo(TEST_INI_AWARE)) tool._setObject(TEST_CONTENT, _TypeInfo(TEST_CONTENT)) tool._setObject(TEST_FOLDER, _TypeInfo(TEST_FOLDER)) return folder
def _makeFolder(id, site_folder=False): from Products.CMFCore.PortalFolder import PortalFolder from Products.CMFCore.TypesTool import TypesTool from Products.CMFCore.tests.base.dummy import DummyType class _TypeInfo(DummyType): def _getId(self): return self._id def constructInstance(self, container, id, *args, **kw): portal_type = self._getId() if portal_type == TEST_FOLDER: content = PortalFolder(id) elif portal_type == TEST_DAV_FOLDER: content = _makeDAVAwareFolder(id) elif portal_type == TEST_CONTENT: content = _makeItem() content._setId(id) elif portal_type == TEST_INI_AWARE: content = _makeINIAware(id) elif portal_type == TEST_CSV_AWARE: content = _makeCSVAware(id) else: raise ValueError('Ugh') content.portal_type = portal_type container._setObject(id, content) return container._getOb(id) folder = PortalFolder(id) folder.portal_type = TEST_FOLDER if site_folder: ttool = TypesTool() ttool._setObject(TEST_CSV_AWARE, _TypeInfo(TEST_CSV_AWARE)) ttool._setObject(TEST_INI_AWARE, _TypeInfo(TEST_INI_AWARE)) ttool._setObject(TEST_CONTENT, _TypeInfo(TEST_CONTENT)) ttool._setObject(TEST_FOLDER, _TypeInfo(TEST_FOLDER)) ttool._setObject(TEST_DAV_FOLDER, _TypeInfo(TEST_DAV_FOLDER)) getSiteManager().registerUtility(ttool, ITypesTool) return folder
def setUp(self): """Setup a site""" # maybe there is a base class for this? self.site = site = DummySite('site') self.sm = getSiteManager() mtool = site._setObject('portal_membership', DummyTool()) ptool = site._setObject('portal_properties', DummyTool()) self.sm.registerUtility(ptool, IPropertiesTool) ttool = site._setObject('portal_types', DummyTool()) utool = site._setObject('portal_url', DummyTool()) folder = PortalFolder('test_folder') self.folder = site._setObject('test_folder', folder) self.uf = self.site._setObject('acl_users', DummyUserFolder())
def test_createMemberarea(self): mtool = self.mtool self.site._setObject( 'Members', PortalFolder('Members') ) self.site._setObject( 'acl_users', DummyUserFolder() ) self.site._setObject( 'portal_workflow', DummyTool() ) mtool.createMemberarea('user_foo') f = self.site.Members.user_foo ownership = self.site.acl_users.user_foo localroles = ( ( 'user_foo', ('Owner',) ), ) self.assertEqual( f.getOwner(), ownership ) self.assertEqual( f.get_local_roles(), localroles, 'CMF Collector issue #162 (LocalRoles broken): %s' % str( f.get_local_roles() ) )
def _ensurePath( site, path ): """ Ensure that 'path' exists within 'site'; return the folder at the end of 'path'. """ if not path: return site if type( path ) is type( '' ): path = string.split( path, '/' ) base = site for element in path: if element not in base.objectIds(): folder = PortalFolder( element ) folder._added_by_FT = 1 base._setOb( element, folder ) base = base._getOb( element ) return base
def _ensurePath(site, path): """ Ensure that 'path' exists within 'site'; return the folder at the end of 'path'. """ if not path: return site if type(path) is type(''): path = string.split(path, '/') base = site for element in path: if element not in base.objectIds(): folder = PortalFolder(element) folder._added_by_FT = 1 base._setOb(element, folder) base = base._getOb(element) return base
def manage_beforeDelete(self, item, container): """ Remove self from the workflow and catalog. """ if aq_base(container) is not aq_base(self): self.unindexObject() PortalFolder.manage_beforeDelete(self, item, container)
def manage_beforeDelete(self, object, container): PortalFolder.manage_beforeDelete(self, object, container) self.catalog.uncatalog_object(self.latest.absolute_url_path())
def __init__(self, id, title=''): PortalFolder.__init__(self, id, title) BTreeFolder2Base.__init__(self, id)
def _checkId(self, id, allow_dup=0): PortalFolder._checkId(self, id, allow_dup) BTreeFolder2Base._checkId(self, id, allow_dup)
def manage_afterAdd(self, item, container): """ Add self to the workflow and catalog. """ PortalFolder.manage_afterAdd(self, item, container) PortalContent.manage_afterAdd(self, item, container)
def manage_afterAdd(self, item, container): " Add self to the workflow and catalog. " # Recurse in the children (ObjectManager) PortalFolder.manage_afterAdd(self, item, container) # Add self to workflow and catalog PortalContent.manage_afterAdd(self, item, container)
def __init__(self, id, title='', storage=None): PortalFolder.__init__(self, id, title) self.storage = storage