示例#1
0
    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' )
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
 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() )
示例#5
0
 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())
示例#6
0
    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')
示例#7
0
 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)
示例#8
0
 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)
示例#9
0
 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')
示例#10
0
 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')
示例#11
0
    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)
示例#12
0
    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)
示例#13
0
    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())
示例#14
0
    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)
示例#15
0
    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])
示例#16
0
    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])
示例#17
0
    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())
示例#18
0
    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)
示例#19
0
    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
示例#20
0
    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
示例#21
0
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
示例#22
0
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
示例#23
0
    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'))
示例#24
0
    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'))
示例#25
0
    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)
示例#26
0
    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)