Example #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' )
Example #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)
Example #3
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() )
Example #4
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)
Example #5
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')
Example #6
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'))

        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'))
Example #7
0
    def test_manageAddFolder(self):
        #
        #   Does MKDIR/MKCOL intercept work?
        #
        from Products.CMFCore.PortalFolder import PortalFolder

        test = self._makeOne('test')

        ttool = self.site._setObject( 'portal_types', TypesTool() )
        ttool._setObject( 'Folder'
                        , FTI( id='Folder'
                             , title='Folder or Directory'
                             , meta_type=PortalFolder.meta_type
                             , product='CMFCore'
                             , factory='manage_addPortalFolder'
                             , filter_content_types=0
                             )
                        )
        ttool._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
        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.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' )
Example #8
0
 def setUp(self):
     SecurityTest.setUp(self)
     self.site = DummySite('site').__of__(self.root)
     sm = getSiteManager()
     self.site._setObject( 'portal_discussion', DiscussionTool() )
     sm.registerUtility(self.site.portal_discussion, IDiscussionTool)
     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)
Example #9
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)
Example #10
0
    def test_folderMove(self):
        #
        #   Does the catalog stay synched when folders are moved?
        #
        from Products.CMFCore.PortalFolder import PortalFolder

        test = self.root.test

        self.root._setObject('portal_types', TypesTool())
        types_tool = self.root.portal_types

        self.root._setObject('portal_catalog', CatalogTool())
        catalog = self.root.portal_catalog
        assert len(catalog) == 0

        test._setObject('folder', PortalFolder('folder', ''))
        folder = test.folder

        folder._setObject('sub', PortalFolder('sub', ''))
        sub = folder.sub

        sub._setObject('foo', DummyContent('foo', catalog=1))
        foo = sub.foo
        assert len(catalog) == 1
        self.failUnless('foo' in catalog.uniqueValuesFor('getId'))
        assert has_path(catalog._catalog, '/test/folder/sub/foo')

        get_transaction().commit(1)
        folder.manage_renameObject(id='sub', new_id='new_sub')

        self.failUnless('foo' in catalog.uniqueValuesFor('getId'))
        assert len(catalog) == 1
        assert has_path(catalog._catalog, '/test/folder/new_sub/foo')

        folder._setObject('bar', DummyContent('bar', catalog=1))
        bar = folder.bar
        self.failUnless('bar' in catalog.uniqueValuesFor('getId'))
        assert len(catalog) == 2
        assert has_path(catalog._catalog, '/test/folder/bar')

        folder._setObject('sub2', PortalFolder('sub2', ''))
        sub2 = folder.sub2
        # Waaa! force sub2 to allow paste of Dummy object.
        sub2.all_meta_types = []
        sub2.all_meta_types.extend(sub2.all_meta_types)
        sub2.all_meta_types.extend(extra_meta_types())

        get_transaction().commit(1)
        cookie = folder.manage_cutObjects(ids=['bar'])
        sub2.manage_pasteObjects(cookie)

        self.failUnless('foo' in catalog.uniqueValuesFor('getId'))
        self.failUnless('bar' in catalog.uniqueValuesFor('getId'))
        assert len(catalog) == 2
        assert has_path(catalog._catalog, '/test/folder/sub2/bar')
Example #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)
Example #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.failUnless('folder2' in folder1.objectIds())
Example #13
0
    def test_allowType( self ):
        self.tool = TypesTool()
        ti = self._makeAndSetInstance( 'Foo' )
        self.failIf( ti.allowType( 'Foo' ) )
        self.failIf( ti.allowType( 'Bar' ) )

        ti = self._makeAndSetInstance( 'Foo2', allowed_content_types=( 'Bar', ) )
        self.failUnless( ti.allowType( 'Bar' ) )

        ti = self._makeAndSetInstance( 'Foo3', filter_content_types=0 )
        self.failUnless( ti.allowType( 'Foo3' ) )
Example #14
0
    def setUp(self):
        SecurityRequestTest.setUp(self)

        root = self.root
        root._setObject('portal_actions', self._makeOne())
        root._setObject('portal_url', URLTool())
        root._setObject('foo', URLTool())
        root._setObject('portal_membership', MembershipTool())
        root._setObject('portal_types', TypesTool())
        self.tool = root.portal_actions
        self.tool.action_providers = ('portal_actions', )
Example #15
0
 def test__checkId_MethodAlias(self):
     sm = getSiteManager(self.site)
     test = self._makeOne('test')
     test._setPortalTypeName('Dummy Content 15')
     ttool = self.site._setObject('portal_types', TypesTool())
     sm.registerUtility(self.site.portal_types, ITypesTool)
     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')
Example #16
0
 def test_portalfolder_cataloging(self):
     #
     # Test to ensure a portal folder itself is *not* cataloged upon
     # instantiation (Tracker issue 309)
     #
     ttool = self.site._setObject('portal_types', TypesTool())
     ctool = self.site._setObject('portal_catalog', DummyCatalogTool())
     wftool = self.site._setObject('portal_workflow', WorkflowTool())
     test = self._makeOne('test')
     wftool.notifyCreated(test)
     self.assertEqual(len(ctool), 0)
Example #17
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
Example #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)
Example #19
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())
Example #20
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
Example #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])
Example #22
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)
Example #23
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])
Example #24
0
    def test_folderMove(self):
        #
        #   Does the catalog stay synched when folders are moved?
        #
        self.root._setObject('test', PortalFolder('test', ''))
        test = self.root.test

        self.root._setObject('portal_types', TypesTool())
        types_tool = self.root.portal_types

        self.root._setObject('portal_catalog', CatalogTool())
        catalog = self.root.portal_catalog
        assert len(catalog) == 0

        test._setObject('folder', PortalFolder('folder', ''))
        folder = test.folder

        folder._setObject('sub', PortalFolder('sub', ''))
        sub = folder.sub

        sub._setObject('foo', DummyContent('foo', 1))
        foo = sub.foo
        assert len(catalog) == 1
        assert 'foo' in catalog.uniqueValuesFor('id')
        assert has_path(catalog._catalog, '/test/folder/sub/foo')

        #import pdb; pdb.set_trace()
        folder.manage_renameObject(id='sub', new_id='new_sub')
        assert 'foo' in catalog.uniqueValuesFor('id')
        assert len(catalog) == 1
        assert has_path(catalog._catalog, '/test/folder/new_sub/foo')

        folder._setObject('bar', DummyContent('bar', 1))
        bar = folder.bar
        assert 'bar' in catalog.uniqueValuesFor('id')
        assert len(catalog) == 2
        assert has_path(catalog._catalog, '/test/folder/bar')

        folder._setObject('sub2', PortalFolder('sub2', ''))
        sub2 = folder.sub2
        # Waaa! force sub2 to allow paste of Dummy object.
        sub2.all_meta_types = []
        sub2.all_meta_types.extend(sub2.all_meta_types)
        sub2.all_meta_types.extend(extra_meta_types())

        cookie = folder.manage_cutObjects(ids=['bar'])
        sub2.manage_pasteObjects(cookie)

        assert 'foo' in catalog.uniqueValuesFor('id')
        assert 'bar' in catalog.uniqueValuesFor('id')
        assert len(catalog) == 2
        assert has_path(catalog._catalog, '/test/folder/sub2/bar')
Example #25
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)
Example #26
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')
Example #27
0
 def test_portalfolder_cataloging(self):
     #
     # Test to ensure a portal folder itself is *not* cataloged upon
     # instantiation (Tracker issue 309)
     #
     sm = getSiteManager(self.site)
     ttool = self.site._setObject( 'portal_types', TypesTool() )
     sm.registerUtility(ttool, ITypesTool)
     ctool = self.site._setObject( 'portal_catalog', CatalogTool() )
     sm.registerUtility(ctool, ICatalogTool)
     wftool = self.site._setObject( 'portal_workflow', WorkflowTool() )
     test = self._makeOne('test')
     wftool.notifyCreated(test)
     self.assertEqual( len(ctool), 0 )
Example #28
0
    def test_folderMove(self):
        #
        #   Does the catalog stay synched when folders are moved?
        #
        from Products.CMFCore.PortalFolder import PortalFolder

        sm = getSiteManager(self.site)
        ttool = self.site._setObject( 'portal_types', TypesTool() )
        sm.registerUtility(ttool, ITypesTool)
        ctool = self.site._setObject( 'portal_catalog', CatalogTool() )
        sm.registerUtility(ctool, ICatalogTool)
        ctool.addIndex('getId', 'FieldIndex')
        self.assertEqual( len(ctool), 0 )

        folder = self._makeOne('folder')
        folder._setObject( 'sub', PortalFolder( 'sub', '' ) )
        folder.sub._setObject( 'foo', DummyContent( 'foo', catalog=1 ) )
        self.assertEqual( len(ctool), 1 )
        self.failUnless( 'foo' in ctool.uniqueValuesFor('getId') )
        self.failUnless( has_path(ctool._catalog,
                                  '/bar/site/folder/sub/foo') )

        transaction.savepoint(optimistic=True)
        folder.manage_renameObject(id='sub', new_id='new_sub')
        self.assertEqual( len(ctool), 1 )
        self.failUnless( 'foo' in ctool.uniqueValuesFor('getId') )
        self.failUnless( has_path(ctool._catalog,
                                  '/bar/site/folder/new_sub/foo') )

        folder._setObject( 'bar', DummyContent( 'bar', catalog=1 ) )
        self.assertEqual( len(ctool), 2 )
        self.failUnless( 'bar' in ctool.uniqueValuesFor('getId') )
        self.failUnless( has_path(ctool._catalog, '/bar/site/folder/bar') )

        folder._setObject( 'sub2', PortalFolder( 'sub2', '' ) )
        sub2 = folder.sub2
        # Waaa! force sub2 to allow paste of Dummy object.
        sub2.all_meta_types = []
        sub2.all_meta_types.extend( sub2.all_meta_types )
        sub2.all_meta_types.extend( extra_meta_types() )

        transaction.savepoint(optimistic=True)
        cookie = folder.manage_cutObjects(ids=['bar'])
        sub2.manage_pasteObjects(cookie)

        self.failUnless( 'foo' in ctool.uniqueValuesFor('getId') )
        self.failUnless( 'bar' in ctool.uniqueValuesFor('getId') )
        self.assertEqual( len(ctool), 2 )
        self.failUnless( has_path(ctool._catalog,
                                  '/bar/site/folder/sub2/bar') )
Example #29
0
 def setUp(self):
     get_transaction().begin()
     self._policy = UnitTestSecurityPolicy()
     SecurityManager.setSecurityPolicy(self._policy)
     self.root = Zope.app()
     self.root._setObject('portal_discussion', DiscussionTool())
     self.discussion_tool = self.root.portal_discussion
     self.root._setObject('portal_catalog', CatalogTool())
     self.catalog_tool = self.root.portal_catalog
     self.root._setObject('portal_url', URLTool())
     self.url_tool = self.root.portal_url
     self.root._setObject('portal_workflow', WorkflowTool())
     self.workflow_tool = self.root.portal_workflow
     self.root._setObject('portal_types', TypesTool())
     types_tool = self.types_tool = self.root.portal_types
Example #30
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',
                title='Folder or Directory',
                meta_type=PortalFolder.meta_type,
                product='CMFCore',
                factory='manage_addPortalFolder',
                filter_content_types=0))
        fti = FTIDATA_DUMMY[0].copy()
        types_tool._setObject('Dummy Content', FTI(**fti))
Example #31
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
        sm = getSiteManager()

        self._initPolicyAndUser() # ensure that sec. machinery allows paste

        self.app._setObject( 'portal_types', TypesTool() )
        types_tool = self.app.portal_types
        sm.registerUtility(types_tool, ITypesTool)
        types_tool._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=()
                                  )
                             )
        types_tool._setObject( UNRESTRICTED_TYPE
                             , FTI( id=UNRESTRICTED_TYPE
                                  , title=UNRESTRICTED_TYPE
                                  , meta_type=PortalFolder.meta_type
                                  , product='CMFCore'
                                  , factory='manage_addPortalFolder'
                                  , global_allow=1
                                  )
                             )

        # 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
                         )
Example #32
0
    def test_folderMove(self):
        #
        #   Does the catalog stay synched when folders are moved?
        #
        from Products.CMFCore.PortalFolder import PortalFolder

        acl_users = self.site._setObject('acl_users', DummyUserFolder())
        newSecurityManager(None, acl_users.all_powerful_Oz)
        ctool = DummyCatalogTool()
        sm = getSiteManager()
        sm.registerUtility(TypesTool(), ITypesTool)
        sm.registerUtility(ctool, ICatalogTool)
        self.assertEqual(len(ctool), 0)

        folder = self._makeOne('folder')
        folder._setObject('sub', PortalFolder('sub', ''))
        folder.sub._setObject('foo', DummyContent('foo', catalog=1))
        self.assertEqual(len(ctool), 1)
        self.assertTrue(has_id(ctool, 'foo'))
        self.assertTrue(has_path(ctool, '/bar/site/folder/sub/foo'))

        transaction.savepoint(optimistic=True)
        folder.manage_renameObject(id='sub', new_id='new_sub')
        self.assertEqual(len(ctool), 1)
        self.assertTrue(has_id(ctool, 'foo'))
        self.assertTrue(has_path(ctool, '/bar/site/folder/new_sub/foo'))

        folder._setObject('bar', DummyContent('bar', catalog=1))
        self.assertEqual(len(ctool), 2)
        self.assertTrue(has_id(ctool, 'bar'))
        self.assertTrue(has_path(ctool, '/bar/site/folder/bar'))

        folder._setObject('sub2', PortalFolder('sub2', ''))
        sub2 = folder.sub2
        # Waaa! force sub2 to allow paste of Dummy object.
        sub2.all_meta_types = []
        sub2.all_meta_types.extend(sub2.all_meta_types)
        sub2.all_meta_types.extend(extra_meta_types())

        transaction.savepoint(optimistic=True)
        cookie = folder.manage_cutObjects(ids=['bar'])
        sub2.manage_pasteObjects(cookie)

        self.assertTrue(has_id(ctool, 'foo'))
        self.assertTrue(has_id(ctool, 'bar'))
        self.assertEqual(len(ctool), 2)
        self.assertTrue(has_path(ctool, '/bar/site/folder/sub2/bar'))
Example #33
0
    def _initSite(self, foo=0):
        self.root.site = Folder(id='site')
        site = self.root.site
        ttool = site.portal_types = TypesTool()

        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
Example #34
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
        sm = getSiteManager()

        self._initPolicyAndUser() # ensure that sec. machinery allows paste

        self.app._setObject( 'portal_types', TypesTool() )
        types_tool = self.app.portal_types
        sm.registerUtility(types_tool, ITypesTool)
        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=1
                                  , allowed_content_types=[ RESTRICTED_TYPE ]
                                  )
                             )

        # 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() )
Example #35
0
 def setUp( self ):
     
     SecurityTest.setUp(self)
     
     root = self.root
     root._setObject( 'portal_discussion', DiscussionTool() )
     self.discussion_tool = root.portal_discussion
     root._setObject( 'portal_catalog', CatalogTool() )
     self.catalog_tool = root.portal_catalog
     root._setObject( 'portal_url', URLTool() )
     self.url_tool = root.portal_url
     root._setObject( 'portal_workflow', WorkflowTool() ) 
     self.workflow_tool = root.portal_workflow
     root._setObject( 'portal_types', TypesTool() )
     types_tool = self.types_tool = root.portal_types
     try: root._delObject('test')
     except AttributeError: pass
     root._setObject( 'test', Document( 'test' ) )
Example #36
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
                         )
Example #37
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)
Example #38
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)
Example #39
0
    def test_catalogUnindexAndIndex(self):
        #
        # Test is a new object does get cataloged upon _setObject
        # and uncataloged upon manage_deleteObjects
        #
        test = self._makeOne('test')
        ttool = self.site._setObject( 'portal_types', TypesTool() )
        ctool = self.site._setObject( 'portal_catalog', CatalogTool() )
        self.assertEqual( len(ctool), 0 )

        test._setObject( 'foo', DummyContent( 'foo' , catalog=1 ) )
        foo = test.foo
        self.failUnless( foo.after_add_called )
        self.failIf( foo.before_delete_called )
        self.assertEqual( len(ctool), 1 )

        foo.reset()
        test._delObject('foo')
        self.failIf( foo.after_add_called )
        self.failUnless( foo.before_delete_called )
        self.assertEqual( len(ctool), 0 )
Example #40
0
def _makeFolder(id, site_folder=False):
    from zope.interface import directlyProvides
    from zope.interface import providedBy
    from Products.CMFCore.PortalFolder import PortalFolder
    from Products.CMFCore.interfaces import ISiteRoot
    from Products.CMFCore.TypesTool import TypesTool
    from Products.CMFCore.tests.base.dummy import DummyType

    class _TypeInfo(DummyType):
        def _getId(self):
            return self._id

        def constructInstance(self, container, id, *args, **kw):
            portal_type = self._getId()
            if portal_type == TEST_FOLDER:
                content = PortalFolder(id)
            elif portal_type == TEST_CONTENT:
                content = _makeItem()
                content._setId(id)
            elif portal_type == TEST_INI_AWARE:
                content = _makeINIAware(id)
            elif portal_type == TEST_CSV_AWARE:
                content = _makeCSVAware(id)
            else:
                raise ValueError, 'Ugh'
            content.portal_type = portal_type
            container._setObject(id, content)
            return container._getOb(id)

    folder = PortalFolder(id)
    folder.portal_type = TEST_FOLDER
    if site_folder:
        directlyProvides(folder, ISiteRoot + providedBy(folder))
        tool = folder.portal_types = TypesTool()
        tool._setObject(TEST_CSV_AWARE, _TypeInfo(TEST_CSV_AWARE))
        tool._setObject(TEST_INI_AWARE, _TypeInfo(TEST_INI_AWARE))
        tool._setObject(TEST_CONTENT, _TypeInfo(TEST_CONTENT))
        tool._setObject(TEST_FOLDER, _TypeInfo(TEST_FOLDER))

    return folder
Example #41
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
Example #42
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'))
Example #43
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)