def setUp(self): SecurityRequestTest.setUp(self) self.site = DummySite('site').__of__(self.root) self.site._setObject('portal_membership', DummyTool()) self.site._setObject('portal_types', TypesTool()) self.site._setObject('portal_url', DummyTool()) fti = FTIDATA_CMF15[0].copy() self.site.portal_types._setObject('Dummy Content 15', FTI(**fti)) self.site._setObject('foo', DummyContent())
def test__checkId_MethodAlias(self): test = self._makeOne('test') test._setPortalTypeName('Dummy Content 15') ttool = self.site._setObject('portal_types', TypesTool()) ttool._setObject('Dummy Content 15', FTI(**FTIDATA_CMF15[0])) acl_users = self.site._setObject('acl_users', DummyUserFolder()) test._checkId('view.html') newSecurityManager(None, acl_users.user_foo) self.assertRaises(BadRequest, test._checkId, 'view.html')
def setUp(self): from Products.CMFCore.TypesTool import FactoryTypeInformation as FTI SecurityTest.setUp(self) self.site = DummySite('site').__of__(self.root) self.acl_users = self.site._setObject('acl_users', DummyUserFolder()) self.ttool = self.site._setObject('portal_types', self._makeOne()) fti = FTIDATA_DUMMY[0].copy() self.ttool._setObject('Dummy Content', FTI(**fti))
def test_paste_with_restricted_item_content_type_not_allowed(self): # Test from CMF Collector #216 (Plone #2186), for the case # in which the item being pasted does not allow adding such # objects to containers which do not explicitly grant access. from Products.CMFCore.PortalFolder import PortalFolder RESTRICTED_TYPE = 'Restricted Item' UNRESTRICTED_TYPE = 'Unrestricted Container' folder1, folder2 = self._initFolders() folder1.portal_type = UNRESTRICTED_TYPE folder2.portal_type = RESTRICTED_TYPE self._initPolicyAndUser() # ensure that sec. machinery allows paste self.app._setObject( 'portal_types', TypesTool() ) types_tool = self.app.portal_types types_tool._setObject( RESTRICTED_TYPE , FTI( id=RESTRICTED_TYPE , title=RESTRICTED_TYPE , meta_type=PortalFolder.meta_type , product='CMFCore' , factory='manage_addPortalFolder' , global_allow=0 ) ) types_tool._setObject( UNRESTRICTED_TYPE , FTI( id=UNRESTRICTED_TYPE , title=UNRESTRICTED_TYPE , meta_type=PortalFolder.meta_type , product='CMFCore' , factory='manage_addPortalFolder' , filter_content_types=0 ) ) # copy and pasting the object into the folder should raise # an exception copy_cookie = self.app.manage_copyObjects( ids=[ 'folder2' ] ) self.assertRaises( ValueError , folder1.manage_pasteObjects , copy_cookie )
def test_contentPaste(self): # # Does copy / paste work? # ctool = self.site._setObject( 'portal_catalog', CatalogTool() ) ttool = self.site._setObject( 'portal_types', TypesTool() ) fti = FTIDATA_DUMMY[0].copy() ttool._setObject( 'Dummy Content', FTI(**fti) ) sub1 = self._makeOne('sub1') sub2 = self._makeOne('sub2') sub3 = self._makeOne('sub3') self.assertEqual( len(ctool), 0 ) sub1._setObject( 'dummy', DummyContent( 'dummy', catalog=1 ) ) self.failUnless( 'dummy' in sub1.objectIds() ) self.failUnless( 'dummy' in sub1.contentIds() ) self.failIf( 'dummy' in sub2.objectIds() ) self.failIf( 'dummy' in sub2.contentIds() ) self.failIf( 'dummy' in sub3.objectIds() ) self.failIf( 'dummy' in sub3.contentIds() ) self.failUnless( has_path(ctool._catalog, '/bar/site/sub1/dummy') ) self.failIf( has_path(ctool._catalog, '/bar/site/sub2/dummy') ) self.failIf( has_path(ctool._catalog, '/bar/site/sub3/dummy') ) cookie = sub1.manage_copyObjects( ids = ( 'dummy', ) ) # 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() ) sub2.manage_pasteObjects( cookie ) self.failUnless( 'dummy' in sub1.objectIds() ) self.failUnless( 'dummy' in sub1.contentIds() ) self.failUnless( 'dummy' in sub2.objectIds() ) self.failUnless( 'dummy' in sub2.contentIds() ) self.failIf( 'dummy' in sub3.objectIds() ) self.failIf( 'dummy' in sub3.contentIds() ) self.failUnless( has_path(ctool._catalog, '/bar/site/sub1/dummy') ) self.failUnless( has_path(ctool._catalog, '/bar/site/sub2/dummy') ) self.failIf( has_path(ctool._catalog, '/bar/site/sub3/dummy') ) get_transaction().commit(1) 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) self.failIf( 'dummy' in sub1.objectIds() ) self.failIf( 'dummy' in sub1.contentIds() ) self.failUnless( 'dummy' in sub2.objectIds() ) self.failUnless( 'dummy' in sub2.contentIds() ) self.failUnless( 'dummy' in sub3.objectIds() ) self.failUnless( 'dummy' in sub3.contentIds() ) self.failIf( has_path(ctool._catalog, '/bar/site/sub1/dummy') ) self.failUnless( has_path(ctool._catalog, '/bar/site/sub2/dummy') ) self.failUnless( has_path(ctool._catalog, '/bar/site/sub3/dummy') )
def setUp(self): self.site = DummySite('site') self.site._setObject( 'portal_types', TypesTool() ) fti = FTIDATA_CMF15[0].copy() self.site.portal_types._setObject( 'Dummy Content 15', FTI(**fti) ) self.site._setObject( 'foo', DummyContent() ) dummy_view = self.site._setObject( 'dummy_view', DummyObject() ) zope.component.provideAdapter(FiveTraversable, (None,), ITraversable) zope.component.provideAdapter(Traverser, (None,), ITraverser)
def test_contentPasteFollowsWorkflowGuards(self): # # Copy/Paste should obey workflow guards # acl_users = self.site._setObject('acl_users', DummyUserFolder()) newSecurityManager(None, acl_users.all_powerful_Oz) ttool = TypesTool() fti = FTIDATA_DUMMY[0].copy() ttool._setObject('Dummy Content', FTI(**fti)) ttool._setObject('Folder', FTI(**fti)) folder = self._makeOne('folder', 'Folder') content = self._makeOne('content') folder._setObject('content', content) sm = getSiteManager() sm.registerUtility(ttool, ITypesTool) # Allow adding of Dummy Content ttool.Folder.manage_changeProperties(filter_content_types=False) # Copy/paste verification should work fine folder._verifyObjectPaste(content) # Add a workflow with a blocking guard # Based on TypesTools tests class DummyWorkflow: _allow = False def allowCreate(self, container, type_id): return self._allow class DummyWorkflowTool: def __init__(self): self._workflows = [DummyWorkflow()] def getWorkflowsFor(self, type_id): return self._workflows # Now copy/paste verification should raise a ValueError sm.registerUtility(DummyWorkflowTool(), IWorkflowTool) self.assertRaises(ValueError, folder._verifyObjectPaste, content)
def setUp(self): SecurityTest.setUp(self) self.site = DummySite('site').__of__(self.app) ttool = TypesTool() fti = FTIDATA_CMF[0].copy() ttool._setObject('Dummy Content 15', FTI(**fti)) self.site._setObject('foo', DummyContent()) sm = getSiteManager() sm.registerUtility(DummyTool(), IMembershipTool) sm.registerUtility(DummyTool().__of__(self.site), IURLTool) sm.registerUtility(ttool, ITypesTool)
def test__checkId_MethodAlias(self): acl_users = self.site._setObject('acl_users', DummyUserFolder()) newSecurityManager(None, acl_users.all_powerful_Oz) test = self._makeOne('test') test._setPortalTypeName('Dummy Content 15') ttool = TypesTool() ttool._setObject('Dummy Content 15', FTI(**FTIDATA_CMF[0])) getSiteManager().registerUtility(ttool, ITypesTool) acl_users = self.site._setObject('acl_users', DummyUserFolder()) test._checkId('view') newSecurityManager(None, acl_users.user_foo) self.assertRaises(BadRequest, test._checkId, 'view')
def setUp(self): from Products.CMFCore.PortalFolder import PortalFolder SecurityTest.setUp(self) sm = getSiteManager() sm.registerUtility(self._getTargetObject(), IFactory, 'cmf.folder') self.site = DummySite('site').__of__(self.root) acl_users = self.site._setObject('acl_users', DummyUserFolder()) newSecurityManager(None, acl_users.all_powerful_Oz) ttool = self.site._setObject('portal_types', TypesTool()) ttool._setObject(self._PORTAL_TYPE, FTI(id=self._PORTAL_TYPE, title='Folder or Directory', meta_type=PortalFolder.meta_type, factory='cmf.folder', filter_content_types=0)) ttool._setObject('Dummy Content', FTI(**FTIDATA_DUMMY[0].copy())) self.f = self.site._setObject('container', PortalFolder('container')) self.f._setPortalTypeName(self._PORTAL_TYPE)
def setUp(self): SecurityRequestTest.setUp(self) self.site = DummySite('site').__of__(self.root) sm = getSiteManager() sm.registerUtility(self.site, ISiteRoot) self.site._setObject('portal_membership', DummyTool()) sm.registerUtility(self.site.portal_membership, IMembershipTool) self.site._setObject('portal_types', TypesTool()) sm.registerUtility(self.site.portal_types, ITypesTool) fti = FTIDATA_CMF15[0].copy() self.site.portal_types._setObject('Dummy Content 15', FTI(**fti)) self.site._setObject('foo', DummyContent())
def test_paste_with_restricted_item_content_type_allowed(self): # Test from CMF Collector #216 (Plone #2186), for the case # in which the item being pasted *does8 allow adding such # objects to containers which *do* explicitly grant access. from Products.CMFCore.PortalFolder import PortalFolder RESTRICTED_TYPE = 'Restricted Item' UNRESTRICTED_TYPE = 'Unrestricted Container' folder1, folder2 = self._initFolders() folder1.portal_type = UNRESTRICTED_TYPE folder2.portal_type = RESTRICTED_TYPE self._initPolicyAndUser() # ensure that sec. machinery allows paste ttool = TypesTool() ttool._setObject( RESTRICTED_TYPE, FTI(id=RESTRICTED_TYPE, title=RESTRICTED_TYPE, meta_type=PortalFolder.meta_type, product='CMFCore', factory='manage_addPortalFolder', global_allow=0)) ttool._setObject( UNRESTRICTED_TYPE, FTI(id=UNRESTRICTED_TYPE, title=UNRESTRICTED_TYPE, meta_type=PortalFolder.meta_type, product='CMFCore', factory='manage_addPortalFolder', filter_content_types=1, allowed_content_types=[RESTRICTED_TYPE])) getSiteManager().registerUtility(ttool, ITypesTool) # copy and pasting the object into the folder should *not* raise # an exception, because the folder's type allows it. copy_cookie = self.app.manage_copyObjects(ids=['folder2']) folder1.manage_pasteObjects(copy_cookie) self.assertTrue('folder2' in folder1.objectIds())
def test_paste_with_restricted_container_content_type(self): # Test from CMF Collector #216 (Plone #2186), for the case # in which the container does not allow adding items of the # type being pasted. from Products.CMFCore.PortalFolder import PortalFolder RESTRICTED_TYPE = 'Restricted Container' UNRESTRICTED_TYPE = 'Unrestricted Item' folder1, folder2 = self._initFolders() folder1.portal_type = RESTRICTED_TYPE folder2.portal_type = UNRESTRICTED_TYPE self._initPolicyAndUser() # ensure that sec. machinery allows paste ttool = TypesTool() ttool._setObject( RESTRICTED_TYPE, FTI(id=RESTRICTED_TYPE, title=RESTRICTED_TYPE, meta_type=PortalFolder.meta_type, product='CMFCore', factory='manage_addPortalFolder', filter_content_types=1, allowed_content_types=())) ttool._setObject( UNRESTRICTED_TYPE, FTI(id=UNRESTRICTED_TYPE, title=UNRESTRICTED_TYPE, meta_type=PortalFolder.meta_type, product='CMFCore', factory='manage_addPortalFolder', global_allow=1)) getSiteManager().registerUtility(ttool, ITypesTool) # copy and pasting the object into the folder should raise # an exception copy_cookie = self.app.manage_copyObjects(ids=['folder2']) self.assertRaises(ValueError, folder1.manage_pasteObjects, copy_cookie)
def setUp(self): SecurityTest.setUp(self) self.root._setObject('portal_types', TypesTool()) types_tool = self.root.portal_types types_tool._setObject( 'Folder', FTI(id='Folder', meta_type=PortalFolder.meta_type, product='CMFCore', factory='manage_addPortalFolder', filter_content_types=0)) types_tool._setObject('Dummy', DummyFTI)
def test_contentPasteFollowsWorkflowGuards(self): # # Copy/Paste should obey workflow guards # ttool = self.site._setObject( 'portal_types', TypesTool() ) fti = FTIDATA_DUMMY[0].copy() ttool._setObject( 'Dummy Content', FTI(**fti) ) ttool._setObject( 'Folder', FTI(**fti) ) folder = self._makeOne('folder', 'Folder') content = self._makeOne('content') folder._setObject('content', content) # Allow adding of Dummy Content ttool.Folder.manage_changeProperties(filter_content_types=False) # Copy/paste verification should work fine folder._verifyObjectPaste( content ) # Add a workflow with a blocking guard # Based on TypesTools tests class DummyWorkflow: _allow = False def allowCreate(self, container, type_id): return self._allow class DummyWorkflowTool: def __init__(self): self._workflows = [DummyWorkflow()] def getWorkflowsFor(self, type_id): return self._workflows # Now copy/paste verification should raise a ValueError self.site.portal_workflow = DummyWorkflowTool() self.assertRaises( ValueError, folder._verifyObjectPaste, content )
def setUp(self): from Products.CMFCore.TypesTool import FactoryTypeInformation as FTI SecurityRequestTest.setUp(self) setUpTraversing() zcml.load_config('permissions.zcml', Products.Five) zcml.load_config('configure.zcml', Products.Five.browser) zcml.load_config('configure.zcml', Products.CMFCore) self.site = DummySite('site').__of__(self.root) self.acl_users = self.site._setObject('acl_users', DummyUserFolder()) self.ttool = self.site._setObject('portal_types', self._makeOne()) fti = FTIDATA_DUMMY[0].copy() self.ttool._setObject('Dummy Content', FTI(**fti))
def test_contentPasteAllowedTypes(self): # # _verifyObjectPaste() should honor allowed content types # from Products.CMFCore.PortalFolder import PortalFolder test = self.root.test self.root._setObject('portal_types', TypesTool()) types_tool = self.root.portal_types fti = FTIDATA_DUMMY[0].copy() types_tool._setObject('Dummy Content', FTI(**fti)) types_tool._setObject('Folder', FTI(**fti)) test._setObject('sub1', PortalFolder('sub1', '')) sub1 = test.sub1 sub1._setObject('dummy', DummyContent('dummy')) test._setObject('sub2', PortalFolder('sub2', '')) sub2 = test.sub2 sub2.all_meta_types = extra_meta_types() # Allow adding of Dummy Content types_tool.Folder.manage_changeProperties(filter_content_types=False) # Copy/paste should work fine cookie = sub1.manage_copyObjects(ids=('dummy', )) sub2.manage_pasteObjects(cookie) # Disallow adding of Dummy Content types_tool.Folder.manage_changeProperties(filter_content_types=True) # Now copy/paste should raise a ValueError cookie = sub1.manage_copyObjects(ids=('dummy', )) self.assertRaises(ValueError, sub2.manage_pasteObjects, cookie)
def test_constructContent_simple_FTI(self): from AccessControl.SecurityManagement import newSecurityManager from AccessControl.SecurityManager import setSecurityPolicy from Products.CMFCore.TypesTool import FactoryTypeInformation as FTI from Products.CMFCore.tests.base.dummy import DummyFolder from Products.CMFCore.tests.base.tidata import FTIDATA_DUMMY 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) fti = FTIDATA_DUMMY[0].copy() tool._setObject('Dummy Content', FTI(**fti)) folder = DummyFolder(id='folder', fake_product=1).__of__(site) tool.constructContent('Dummy Content', container=folder, id='page1') self.assertEqual(folder.page1.portal_type, 'Dummy Content')
def setUp(self): super(DynamicTypeDefaultTraversalTests, self).setUp() self.site = DummySite('site') self.site._setObject('portal_types', TypesTool()) fti = FTIDATA_CMF15[0].copy() self.site.portal_types._setObject('Dummy Content 15', FTI(**fti)) self.site._setObject('foo', DummyContent()) dummy_view = self.site._setObject('dummy_view', DummyObject()) try: from zope.component import provideAdapter provideAdapter(FiveTraversable, (None, ), ITraversable) provideAdapter(Traverser, (None, ), ITraverser) except ImportError: # BBB for Zope 2.8 from zope.app.tests import ztapi ztapi.provideAdapter(None, ITraversable, FiveTraversable) ztapi.provideAdapter(None, ITraverser, Traverser)
def test_constructContent_FTI_w_wftool_w_workflow_w_guard_denies(self): from AccessControl import Unauthorized from AccessControl.SecurityManagement import newSecurityManager from AccessControl.SecurityManager import setSecurityPolicy from Products.CMFCore.TypesTool import FactoryTypeInformation as FTI from Products.CMFCore.tests.base.dummy import DummyFolder from Products.CMFCore.tests.base.tidata import FTIDATA_DUMMY 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) fti = FTIDATA_DUMMY[0].copy() tool._setObject('Dummy Content', FTI(**fti)) folder = DummyFolder(id='folder', fake_product=1).__of__(site) tool.portal_workflow = DummyWorkflowTool(DummyWorkflow(False)) self.assertRaises(Unauthorized, tool.constructContent, 'Dummy Content', container=folder, id='page1')
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 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_contentPasteAllowedTypes(self): # # Does _verifyObjectPaste check allowed content types? # test = self.root.test self.root._setObject('portal_types', TypesTool()) types_tool = self.root.portal_types types_tool._setObject('Dummy Content', DummyFTI) types_tool._setObject( 'Folder', FTI(id='Folder', title='Folder or Directory', meta_type=PortalFolder.meta_type, product='CMFCore', factory='manage_addPortalFolder', filter_content_types=0)) test._setObject('sub1', PortalFolder('sub1', '')) sub1 = test.sub1 sub1._setObject('dummy', DummyContent('dummy')) test._setObject('sub2', PortalFolder('sub2', '')) sub2 = test.sub2 sub2.all_meta_types = extra_meta_types() # Copy/paste should work fine cookie = sub1.manage_copyObjects(ids=('dummy', )) sub2.manage_pasteObjects(cookie) # Disallow adding of Dummy Content types_tool.Folder.manage_changeProperties(filter_content_types=1) # Now copy/paste should raise a ValueError cookie = sub1.manage_copyObjects(ids=('dummy', )) self.assertRaises(ValueError, sub2.manage_pasteObjects, cookie)
return id __roles__ = ( 'FooAdder', ) __allow_access_to_unprotected_subobjects__ = { 'addFoo' : 1 } DummyFTI = FTI( 'Dummy Content' , title='Dummy Content Title' , meta_type=DummyContent.meta_type , product='FooProduct' , factory='addFoo' , actions= ( { 'name' : 'View' , 'action' : 'string:view' , 'permissions' : ( 'View', ) } , { 'name' : 'View2' , 'action' : 'string:view2' , 'permissions' : ( 'View', ) } , { 'name' : 'Edit' , 'action' : 'string:edit' , 'permissions' : ( 'forbidden permission',) } ) ) class DummyFolder( Implicit ): """ Dummy Container for testing """
def _makeInstance(self, id, **kw): return FTI(id, **kw)
def _makeStuff(self, prefix=''): ti = FTI('Foo', product='FooProduct', factory='addFoo') folder = DummyFolder(fake_product=1, prefix=prefix) return ti, folder
def test_manageAddFolder(self): # # Does MKDIR/MKCOL intercept work? # test = self.root.test test._setPortalTypeName('Folder') self.root.reindexObject = lambda: 0 self.root._setObject('portal_types', TypesTool()) types_tool = self.root.portal_types types_tool._setObject( 'Folder', FTI(id='Folder', title='Folder or Directory', meta_type=PortalFolder.meta_type, product='CMFCore', factory='manage_addPortalFolder', filter_content_types=0)) types_tool._setObject( 'Grabbed', FTI('Grabbed', title='Grabbed Content', 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._getPortalTypeName(), 'Folder') self.assertEqual(test.simple.Type(), 'Folder or Directory') 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='string:grabbed', condition='', 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._getPortalTypeName(), 'Grabbed') self.assertEqual(test.indirect.Type(), 'Grabbed Content') self.assertEqual(test.indirect.getId(), 'indirect') self.assertEqual(test.indirect.Title(), 'Indirect')
def testHTML( self ): self.REQUEST['BODY']=BASIC_HTML ttool = self.site._setObject( 'portal_types', TypesTool() ) fti = FTIDATA_CMF15[0].copy() del fti['id'] ttool._setObject( 'Document', FTI('Document', **fti) ) zpt = self.site._setObject( 'source_html', ZopePageTemplate('source_html') ) dir = abspath( dirname(utils.__file__) ) _file = path_join(dir, 'skins', 'zpt_content', 'source_html.pt') data = open(_file, 'r').read() zpt.write(data) d = self._makeOne('foo') d._setPortalTypeName('Document') d.PUT(self.REQUEST, self.RESPONSE) rnlinesplit = compile( r'\r?\n?' ) simple_lines = rnlinesplit.split( BASIC_HTML ) get_lines = rnlinesplit.split( d.manage_FTPget() ) # strip off headers meta_pattern = compile( r'meta name="([a-z]*)" ' + r'content="([a-z]*)"' ) title_pattern = compile( r'<title>(.*)</title>' ) simple_headers = [] while simple_lines and simple_lines[0] != '<BODY>': header = simple_lines[0].strip().lower() match = meta_pattern.search( header ) if match: simple_headers.append( match.groups() ) else: match = title_pattern.search( header ) if match: simple_headers.append( ( 'title', match.group(1) ) ) simple_lines = simple_lines[1:] get_headers = [] while get_lines and get_lines[0] != '<BODY>': header = get_lines[0].strip().lower() match = meta_pattern.search( header ) if match: get_headers.append( match.groups() ) else: match = title_pattern.search( header ) if match: get_headers.append( ( 'title', match.group(1) ) ) get_lines = get_lines[1:] self.assertEqual( get_lines, simple_lines ) self.failUnless( get_headers ) self.failUnless( simple_headers ) self.failUnless( len( get_headers ) >= len( simple_headers ) ) for header in simple_headers: self.failUnless( header in get_headers ) body1 = d.EditableBody() self.REQUEST['BODY'] = d.manage_FTPget() d.PUT(self.REQUEST, self.RESPONSE) self.assertEqual( d.EditableBody(), body1 )
def setUp(self): self.site = DummySite('site') self.site._setObject('portal_types', TypesTool()) fti = FTIDATA_CMF15[0].copy() self.site.portal_types._setObject('Dummy Content 15', FTI(**fti)) self.site._setObject('foo', DummyContent())
def test_contentPaste(self): # # Does copy / paste work? # test = self.root.test self.root._setObject('portal_types', TypesTool()) types_tool = self.root.portal_types fti = FTIDATA_DUMMY[0].copy() types_tool._setObject('Dummy Content', FTI(**fti)) 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', catalog=1)) dummy = sub1.dummy 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. 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') get_transaction().commit(1) 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')