예제 #1
0
 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())
예제 #2
0
 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')
예제 #3
0
    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))
예제 #4
0
    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
                         )
예제 #5
0
    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') )
예제 #6
0
    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)
예제 #7
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)
예제 #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 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)
예제 #11
0
 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())
예제 #12
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())
예제 #13
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)
예제 #14
0
    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)
예제 #15
0
    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 )
예제 #16
0
    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))
예제 #17
0
    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)
예제 #18
0
    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')
예제 #19
0
    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)
예제 #20
0
    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')
예제 #21
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])
예제 #22
0
    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] )
예제 #23
0
    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)
예제 #24
0
파일: dummy.py 프로젝트: bendavis78/zope
            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
    """
예제 #25
0
 def _makeInstance(self, id, **kw):
     return FTI(id, **kw)
예제 #26
0
    def _makeStuff(self, prefix=''):

        ti = FTI('Foo', product='FooProduct', factory='addFoo')
        folder = DummyFolder(fake_product=1, prefix=prefix)

        return ti, folder
예제 #27
0
    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')
예제 #28
0
    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 )
예제 #29
0
 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())
예제 #30
0
    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')