def test_manageAddFolder(self): # # Does MKDIR/MKCOL intercept work? # from Products.CMFCore.PortalFolder import PortalFolder from Products.CMFCore.PortalFolder import PortalFolderFactory acl_users = self.site._setObject('acl_users', DummyUserFolder()) newSecurityManager(None, acl_users.all_powerful_Oz) test = self._makeOne('test') ttool = TypesTool() ttool._setObject( 'Folder' , FTI( id='Folder' , title='Folder or Directory' , meta_type=PortalFolder.meta_type , factory='cmf.folder' , filter_content_types=0 ) ) ttool._setObject( 'Grabbed' , FTI( 'Grabbed' , title='Grabbed Content' , meta_type=PortalFolder.meta_type , factory='cmf.folder' ) ) sm = getSiteManager() sm.registerUtility(ttool, ITypesTool) sm.registerUtility(PortalFolderFactory, IFactory, 'cmf.folder') # 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 ttool.Folder.setMethodAliases( {'mkdir': 'grabbed'} ) 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.app.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 test_contentPasteAllowedTypes(self): # # _verifyObjectPaste() should honor allowed content types # ttool = TypesTool() getSiteManager().registerUtility(ttool, ITypesTool) fti = FTIDATA_DUMMY[0].copy() ttool._setObject('Dummy Content', FTI(**fti)) ttool._setObject('Folder', FTI(**fti)) sub1 = self._makeOne('sub1') sub1._setObject('dummy', DummyContent('dummy')) sub2 = self._makeOne('sub2') sub2.all_meta_types = extra_meta_types() # Allow adding of Dummy Content ttool.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 ttool.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_contentPasteAllowedTypes(self): # # _verifyObjectPaste() should honor allowed content types # ttool = TypesTool() getSiteManager().registerUtility(ttool, ITypesTool) fti = FTIDATA_DUMMY[0].copy() ttool._setObject('Dummy Content', FTI(**fti)) ttool._setObject('Folder', FTI(**fti)) sub1 = self._makeOne('sub1') sub1._setObject('dummy', DummyContent('dummy')) sub2 = self._makeOne('sub2') sub2.all_meta_types = extra_meta_types() # Allow adding of Dummy Content ttool.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 ttool.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 setUp(self): self.site = DummySite('site') ttool = TypesTool() getSiteManager().registerUtility(ttool, ITypesTool) fti = FTIDATA_CMF[0].copy() ttool._setObject( 'Dummy Content 15', FTI(**fti) ) self.site._setObject( 'foo', DummyContent() ) dummy_view = self.site._setObject( 'dummy_view', DummyObject() )
def setUp(self): self.site = DummySite('site') ttool = TypesTool() getSiteManager().registerUtility(ttool, ITypesTool) fti = FTIDATA_CMF[0].copy() ttool._setObject('Dummy Content 15', FTI(**fti)) self.site._setObject('foo', DummyContent()) dummy_view = self.site._setObject('dummy_view', DummyObject())
def test_manageAddFolder(self): # # Does MKDIR/MKCOL intercept work? # from Products.CMFCore.PortalFolder import PortalFolder from Products.CMFCore.PortalFolder import PortalFolderFactory acl_users = self.site._setObject('acl_users', DummyUserFolder()) newSecurityManager(None, acl_users.all_powerful_Oz) test = self._makeOne('test') ttool = TypesTool() ttool._setObject( 'Folder', FTI(id='Folder', title='Folder or Directory', meta_type=PortalFolder.meta_type, factory='cmf.folder', filter_content_types=0)) ttool._setObject( 'Grabbed', FTI('Grabbed', title='Grabbed Content', meta_type=PortalFolder.meta_type, factory='cmf.folder')) sm = getSiteManager() sm.registerUtility(ttool, ITypesTool) sm.registerUtility(PortalFolderFactory, IFactory, 'cmf.folder') # 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 ttool.Folder.setMethodAliases({'mkdir': 'grabbed'}) 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.app.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 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 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 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.html') newSecurityManager(None, acl_users.user_foo) self.assertRaises(BadRequest, test._checkId, 'view.html')
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 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 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.failUnless('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 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): 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_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 _initSite(self, foo=0): site = Folder(id='site').__of__(self.app) ttool = TypesTool() getSiteManager().registerUtility(ttool, ITypesTool) if foo == 1: fti = _TI_LIST[0].copy() ttool._setObject(fti['id'], FactoryTypeInformation(**fti)) sti = _TI_LIST[1].copy() ttool._setObject(sti['id'], ScriptableTypeInformation(**sti)) elif foo == 2: fti = _TI_LIST_WITH_FILENAME[0].copy() ttool._setObject(fti['id'], FactoryTypeInformation(**fti)) sti = _TI_LIST_WITH_FILENAME[1].copy() ttool._setObject(sti['id'], ScriptableTypeInformation(**sti)) return site, ttool
def _initSite(self, foo=0): site = Folder(id='site').__of__(self.app) ttool = TypesTool() getSiteManager().registerUtility(ttool, ITypesTool) if foo == 1: fti = _TI_LIST[0].copy() ttool._setObject(fti['id'], FactoryTypeInformation(**fti)) sti = _TI_LIST[1].copy() ttool._setObject(sti['id'], ScriptableTypeInformation(**sti)) elif foo == 2: fti = _TI_LIST_WITH_FILENAME[0].copy() ttool._setObject(fti['id'], FactoryTypeInformation(**fti)) sti = _TI_LIST_WITH_FILENAME[1].copy() ttool._setObject(sti['id'], ScriptableTypeInformation(**sti)) return site, ttool
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 _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: 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)) getSiteManager().registerUtility(ttool, ITypesTool) return folder
def test_contentPaste(self): # # Does copy / paste work? # acl_users = self.site._setObject('acl_users', DummyUserFolder()) newSecurityManager(None, acl_users.all_powerful_Oz) ctool = DummyCatalogTool() ttool = 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) sm = getSiteManager() sm.registerUtility(ctool, ICatalogTool) sm.registerUtility(ttool, ITypesTool) sub1._setObject('dummy', DummyContent('dummy', catalog=1)) self.assertTrue('dummy' in sub1.objectIds()) self.assertTrue('dummy' in sub1.contentIds()) self.assertFalse('dummy' in sub2.objectIds()) self.assertFalse('dummy' in sub2.contentIds()) self.assertFalse('dummy' in sub3.objectIds()) self.assertFalse('dummy' in sub3.contentIds()) self.assertTrue(has_path(ctool, '/bar/site/sub1/dummy')) self.assertFalse(has_path(ctool, '/bar/site/sub2/dummy')) self.assertFalse(has_path(ctool, '/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.assertTrue('dummy' in sub1.objectIds()) self.assertTrue('dummy' in sub1.contentIds()) self.assertTrue('dummy' in sub2.objectIds()) self.assertTrue('dummy' in sub2.contentIds()) self.assertFalse('dummy' in sub3.objectIds()) self.assertFalse('dummy' in sub3.contentIds()) self.assertTrue(has_path(ctool, '/bar/site/sub1/dummy')) self.assertTrue(has_path(ctool, '/bar/site/sub2/dummy')) self.assertFalse(has_path(ctool, '/bar/site/sub3/dummy')) transaction.savepoint(optimistic=True) 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.assertFalse('dummy' in sub1.objectIds()) self.assertFalse('dummy' in sub1.contentIds()) self.assertTrue('dummy' in sub2.objectIds()) self.assertTrue('dummy' in sub2.contentIds()) self.assertTrue('dummy' in sub3.objectIds()) self.assertTrue('dummy' in sub3.contentIds()) self.assertFalse(has_path(ctool, '/bar/site/sub1/dummy')) self.assertTrue(has_path(ctool, '/bar/site/sub2/dummy')) self.assertTrue(has_path(ctool, '/bar/site/sub3/dummy'))
def test_contentPaste(self): # # Does copy / paste work? # acl_users = self.site._setObject('acl_users', DummyUserFolder()) newSecurityManager(None, acl_users.all_powerful_Oz) ctool = DummyCatalogTool() ttool = 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) sm = getSiteManager() sm.registerUtility(ctool, ICatalogTool) sm.registerUtility(ttool, ITypesTool) sub1._setObject('dummy', DummyContent('dummy', catalog=1)) self.assertTrue('dummy' in sub1.objectIds()) self.assertTrue('dummy' in sub1.contentIds()) self.assertFalse('dummy' in sub2.objectIds()) self.assertFalse('dummy' in sub2.contentIds()) self.assertFalse('dummy' in sub3.objectIds()) self.assertFalse('dummy' in sub3.contentIds()) self.assertTrue(has_path(ctool, '/bar/site/sub1/dummy')) self.assertFalse(has_path(ctool, '/bar/site/sub2/dummy')) self.assertFalse(has_path(ctool, '/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.assertTrue('dummy' in sub1.objectIds()) self.assertTrue('dummy' in sub1.contentIds()) self.assertTrue('dummy' in sub2.objectIds()) self.assertTrue('dummy' in sub2.contentIds()) self.assertFalse('dummy' in sub3.objectIds()) self.assertFalse('dummy' in sub3.contentIds()) self.assertTrue(has_path(ctool, '/bar/site/sub1/dummy')) self.assertTrue(has_path(ctool, '/bar/site/sub2/dummy')) self.assertFalse(has_path(ctool, '/bar/site/sub3/dummy')) transaction.savepoint(optimistic=True) 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.assertFalse('dummy' in sub1.objectIds()) self.assertFalse('dummy' in sub1.contentIds()) self.assertTrue('dummy' in sub2.objectIds()) self.assertTrue('dummy' in sub2.contentIds()) self.assertTrue('dummy' in sub3.objectIds()) self.assertTrue('dummy' in sub3.contentIds()) self.assertFalse(has_path(ctool, '/bar/site/sub1/dummy')) self.assertTrue(has_path(ctool, '/bar/site/sub2/dummy')) self.assertTrue(has_path(ctool, '/bar/site/sub3/dummy'))
def testHTML(self): self.REQUEST['BODY'] = BASIC_HTML ttool = TypesTool() fti = FTIDATA_CMF[0].copy() del fti['id'] ttool._setObject('Document', FTI('Document', **fti)) ps = self.site._setObject('source_html', PythonScript('source_html')) zpt = self.site._setObject('source_html', ZopePageTemplate('source_html_template')) dir = abspath(dirname(utils.__file__)) _file = path_join(dir, 'skins', 'zpt_content', 'source_html.py') data = open(_file, 'r').read() ps.write(data) _file = path_join(dir, 'skins', 'zpt_content', 'source_html_template.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.assertTrue(get_headers) self.assertTrue(simple_headers) self.assertTrue(len(get_headers) >= len(simple_headers)) for header in simple_headers: self.assertTrue(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 testHTML(self): self.REQUEST['BODY'] = BASIC_HTML ttool = TypesTool() fti = FTIDATA_CMF[0].copy() del fti['id'] ttool._setObject('Document', FTI('Document', **fti)) ps = self.site._setObject('source_html', PythonScript('source_html')) zpt = self.site._setObject('source_html', ZopePageTemplate('source_html_template')) dir = abspath(dirname(utils.__file__)) _file = path_join(dir, 'skins', 'zpt_content', 'source_html.py') data = open(_file, 'r').read() ps.write(data) _file = path_join(dir, 'skins', 'zpt_content', 'source_html_template.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.assertTrue(get_headers) self.assertTrue(simple_headers) self.assertTrue(len(get_headers) >= len(simple_headers)) for header in simple_headers: self.assertTrue(header in get_headers) body1 = d.EditableBody() self.REQUEST['BODY'] = d.manage_FTPget() d.PUT(self.REQUEST, self.RESPONSE) self.assertEqual(d.EditableBody(), body1)