Пример #1
0
    def test_deleteMembers(self):
        mtool = self.site.portal_membership
        members = self.site._setObject('Members', PortalFolder('Members'))
        acl_users = self.site._setObject('acl_users', DummyUserFolder())
        utool = self.site._setObject('portal_url', DummyTool())
        wtool = self.site._setObject('portal_workflow', DummyTool())
        mdtool = self.site._setObject('portal_memberdata', MemberDataTool())
        newSecurityManager(None, acl_users.all_powerful_Oz)

        self.assertEqual(acl_users.getUserById('user_foo'), acl_users.user_foo)
        mtool.createMemberArea('user_foo')
        self.failUnless(hasattr(members.aq_self, 'user_foo'))
        mdtool.registerMemberData('Dummy', 'user_foo')
        self.failUnless(mdtool._members.has_key('user_foo'))

        rval = mtool.deleteMembers(('user_foo', 'user_baz'))
        self.assertEqual(rval, ('user_foo', ))
        self.failIf(acl_users.getUserById('user_foo', None))
        self.failIf(mdtool._members.has_key('user_foo'))
        self.failIf(hasattr(members.aq_self, 'user_foo'))
Пример #2
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)
Пример #3
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
Пример #4
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
Пример #5
0
    def test_createMemberArea_chained(self):
        LOCAL_USER_ID = 'user_foo'
        NONLOCAL_USER_ID = 'user_bar'

        self.app._setObject('folder', Folder('folder'))
        site = self._makeSite(self.app.folder)
        mtool = site.portal_membership
        members = site._setObject('Members', PortalFolder('Members'))

        local_uf = DummyUserFolder()
        delattr(local_uf, NONLOCAL_USER_ID)
        acl_users = site._setObject('acl_users', local_uf)

        nonlocal_uf = DummyUserFolder()
        delattr(nonlocal_uf, LOCAL_USER_ID)
        self.app.folder._setObject('acl_users', nonlocal_uf)

        newSecurityManager(None, acl_users.all_powerful_Oz)
        mtool.createMemberArea(NONLOCAL_USER_ID)
        self.assertTrue(hasattr(members.aq_self, NONLOCAL_USER_ID))
        mtool.createMemberArea(LOCAL_USER_ID)
        self.assertTrue(hasattr(members.aq_self, LOCAL_USER_ID))
Пример #6
0
    def test_deleteMembers(self):
        site = self._makeSite()
        sm = getSiteManager()
        sm.registerUtility(site, ISiteRoot)
        mtool = site.portal_membership
        members = site._setObject('Members', PortalFolder('Members'))
        acl_users = site._setObject('acl_users', DummyUserFolder())
        mdtool = MemberDataTool()
        sm.registerUtility(mdtool, IMemberDataTool)
        newSecurityManager(None, acl_users.all_powerful_Oz)

        self.assertEqual(acl_users.getUserById('user_foo'), acl_users.user_foo)
        mtool.createMemberArea('user_foo')
        self.assertTrue(hasattr(members.aq_self, 'user_foo'))
        mdtool.registerMemberData('Dummy', 'user_foo')
        self.assertTrue('user_foo' in mdtool._members)

        rval = mtool.deleteMembers(('user_foo', 'user_baz'))
        self.assertEqual(rval, ('user_foo', ))
        self.assertFalse(acl_users.getUserById('user_foo', None))
        self.assertFalse('user_foo' in mdtool._members)
        self.assertFalse(hasattr(members.aq_self, 'user_foo'))
Пример #7
0
    def test_processActions(self):
        """
        Are the correct, permitted methods returned for actions?
        """
        self.root._setObject('portal', PortalFolder('portal', ''))
        portal = self.root.portal
        portal.invokeFactory('Dummy Content', 'actions_dummy')
        dummy = portal._getOb('actions_dummy')

        # so we can traverse to it:
        dummy.view = DummyObject("view")
        dummy.view2 = DummyObject("view2")
        dummy.edit = DummyObject("edit")

        default_view = dummy()
        custom_view = _getViewFor(dummy, view='view2')()
        unpermitted_view = _getViewFor(dummy, view='edit')()

        self.failUnlessEqual(default_view, 'view')
        self.failUnlessEqual(custom_view, 'view2')
        self.failIf(unpermitted_view == 'edit')
        self.failUnlessEqual(unpermitted_view, 'view')
Пример #8
0
    def test_createMemberArea(self):
        site = self._makeSite()
        mtool = site.portal_membership
        members = site._setObject('Members', PortalFolder('Members'))
        acl_users = site._setObject('acl_users', DummyUserFolder())

        # permission
        mtool.createMemberArea('user_foo')
        self.assertFalse(hasattr(members.aq_self, 'user_foo'))
        newSecurityManager(None, acl_users.user_bar)
        mtool.createMemberArea('user_foo')
        self.assertFalse(hasattr(members.aq_self, 'user_foo'))
        newSecurityManager(None, acl_users.user_foo)
        mtool.setMemberareaCreationFlag()
        mtool.createMemberArea('user_foo')
        self.assertFalse(hasattr(members.aq_self, 'user_foo'))
        newSecurityManager(None, acl_users.all_powerful_Oz)
        mtool.setMemberareaCreationFlag()
        mtool.createMemberArea('user_foo')
        self.assertTrue(hasattr(members.aq_self, 'user_foo'))

        # default content
        f = members.user_foo
        ownership = acl_users.user_foo
        localroles = (('user_foo', ('Owner', )), )
        self.assertEqual(f.Title(), "user_foo's Home")
        self.assertEqual(f.getPortalTypeName(), 'Folder')
        self.assertEqual(f.getOwner(), ownership)
        self.assertEqual(
            f.get_local_roles(), localroles,
            'CMF Collector issue #162 (LocalRoles broken): %s' %
            str(f.get_local_roles()))
        for p in (View, AccessContentsInformation):
            roles = [
                r['name'] for r in f.rolesOfPermission(p) if r['selected']
            ]
            self.assertEqual(roles, ['Manager', 'Owner', 'Reviewer'])
            self.assertEqual(bool(f.acquiredRolesAreUsedBy(p)), False)
Пример #9
0
    def test_createMemberArea_chained(self):
        LOCAL_USER_ID = 'user_foo'
        NONLOCAL_USER_ID = 'user_bar'

        self.root._setObject('folder', Folder('folder'))
        site = self._makeSite(self.root.folder)
        mtool = site.portal_membership
        members = site._setObject('Members', PortalFolder('Members'))
        getSiteManager().registerUtility(DummyTool(), IWorkflowTool)

        local_uf = DummyUserFolder()
        delattr(local_uf, NONLOCAL_USER_ID)
        acl_users = site._setObject('acl_users', local_uf)

        nonlocal_uf = DummyUserFolder()
        delattr(nonlocal_uf, LOCAL_USER_ID)
        self.root.folder._setObject('acl_users', nonlocal_uf)

        newSecurityManager(None, acl_users.all_powerful_Oz)
        mtool.createMemberArea(NONLOCAL_USER_ID)
        self.failUnless(hasattr(members.aq_self, NONLOCAL_USER_ID))
        mtool.createMemberArea(LOCAL_USER_ID)
        self.failUnless(hasattr(members.aq_self, LOCAL_USER_ID))
Пример #10
0
def _ensurePath(site, path):
    """
        Ensure that 'path' exists within 'site';  return the folder
        at the end of 'path'.
    """
    if not path:
        return site

    if type(path) is type(''):
        path = string.split(path, '/')

    base = site

    for element in path:

        if element not in base.objectIds():
            folder = PortalFolder(element)
            folder._added_by_FT = 1
            base._setOb(element, folder)

        base = base._getOb(element)

    return base
Пример #11
0
 def test_listDictionaryActions(self):
     """
     Check that listFilteredActionsFor works for objects
     that return dictionaries
     """
     root = self.root
     tool = self.tool
     root._setObject('donkey', PortalFolder('donkey'))
     self.assertEqual(
         tool.listFilteredActionsFor(root.donkey), {
             'workflow': [],
             'user': [],
             'object': [],
             'folder': [{
                 'permissions': ('List folder contents', ),
                 'id': 'folderContents',
                 'url': ' http://foo/donkey/folder_contents',
                 'name': 'Folder contents',
                 'visible': 1,
                 'category': 'folder'
             }],
             'global': []
         })
Пример #12
0
    def test_createMemberarea(self):
        mtool = self.mtool
        self.site._setObject('Members', PortalFolder('Members'))
        self.site._setObject('acl_users', DummyUserFolder())
        self.site._setObject('portal_workflow', DummyTool())
        mtool.createMemberarea('user_foo')

        f = self.site.Members.user_foo
        ownership = self.site.acl_users.user_foo
        localroles = (('user_foo', ('Owner', )), )
        self.assertEqual(f.getOwner(), ownership)
        self.assertEqual(
            f.get_local_roles(), localroles,
            'CMF Collector issue #162 (LocalRoles broken): %s' %
            str(f.get_local_roles()))
        self.assertEqual(
            f.index_html.getOwner(), ownership,
            'CMF Collector issue #162 (Ownership broken): %s' %
            str(f.index_html.getOwner()))
        self.assertEqual(
            f.index_html.get_local_roles(), localroles,
            'CMF Collector issue #162 (LocalRoles broken): %s' %
            str(f.index_html.get_local_roles()))
Пример #13
0
    def test_move_cant_delete_source( self ):

        #
        #   This test fails on Zope's earlier than 2.7.3 because of the
        #   changes required to 'OFS.CopytSupport.manage_pasteObjects'
        #   which must pass 'validate_src' of 2 to '_verifyObjectPaste'
        #   to indicate that the object is being moved, rather than
        #   simply copied.
        #
        #   If you are running with such a Zope, this test will fail,
        #   because the move (which should raise Unauthorized) will be
        #   allowed.
        #
        from AccessControl.Permissions import delete_objects as DeleteObjects
        from Products.CMFCore.PortalFolder import PortalFolder

        sm = getSiteManager()
        folder1, folder2 = self._initFolders()
        folder1.manage_permission( DeleteObjects, roles=(), acquire=0 )

        folder1._setObject( 'sub', PortalFolder( 'sub' ) )
        transaction.savepoint(optimistic=True) # get a _p_jar for 'sub'

        self.app.portal_types = DummyTypesTool()
        sm.registerUtility(self.app.portal_types, ITypesTool)

        def _no_delete_objects(permission, object, context):
            return permission != DeleteObjects

        self._initPolicyAndUser( c_lambda=_no_delete_objects )

        cookie = folder1.manage_cutObjects( ids=( 'sub', ) )
        self._assertCopyErrorUnauth( folder2.manage_pasteObjects
                                   , cookie
                                   , ce_regex='Insufficient Privileges'
                                             + '.*%s' % DeleteObjects
                                   )
Пример #14
0
    def test_constructContent_simple_STI(self):
        from AccessControl import Unauthorized
        from AccessControl.SecurityManagement import newSecurityManager
        from AccessControl.SecurityManager import setSecurityPolicy
        from Products.CMFCore.PortalFolder import PortalFolder
        from Products.CMFCore.TypesTool \
                import ScriptableTypeInformation as STI
        from Products.CMFCore.tests.base.dummy import DummyFactoryDispatcher
        from Products.CMFCore.tests.base.tidata import STI_SCRIPT
        from Products.PythonScripts.PythonScript import PythonScript
        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)
        sti_baz = STI('Baz',
                      permission='Add portal content',
                      constructor_path='addBaz')
        tool._setObject('Baz', sti_baz)
        script = PythonScript('addBaz')
        script.write(STI_SCRIPT)
        tool._setObject('addBaz', script)
        folder = site._setObject('folder', PortalFolder(id='folder'))
        folder.manage_addProduct = {
            'FooProduct': DummyFactoryDispatcher(folder)
        }
        folder._owner = (['acl_users'], 'user_foo')
        self.assertEqual(folder.getOwner(), acl_users.user_foo)

        try:
            tool.constructContent('Baz', container=folder, id='page2')
        except Unauthorized:
            self.fail('CMF Collector issue #165 (Ownership bug): '
                      'Unauthorized raised')

        self.assertEqual(folder.page2.portal_type, 'Baz')
Пример #15
0
    def test_processActions(self):
        """
        Are the correct, permitted methods returned for actions?
        """
        site = self.site
        portal = site._setObject('portal', PortalFolder(id='portal'))
        portal.manage_addProduct = {'FooProduct': DummyFactory(portal)}
        portal.invokeFactory('Dummy Content', 'actions_dummy')
        dummy = portal._getOb('actions_dummy')

        # so we can traverse to it:
        dummy.view = DummyObject("view")
        dummy.view2 = DummyObject("view2")
        dummy.edit = DummyObject("edit")

        default_view = dummy()
        self._trap_warning_output()
        custom_view = _getViewFor(dummy, view='view2')()
        unpermitted_view = _getViewFor(dummy, view='edit')()

        self.failUnlessEqual(default_view, 'view')
        self.failUnlessEqual(custom_view, 'view2')
        self.failIf(unpermitted_view == 'edit')
        self.failUnlessEqual(unpermitted_view, 'view')
Пример #16
0
 def _makeOne( self, id ):
     from Products.CMFCore.PortalFolder import PortalFolder
     return PortalFolder( id ).__of__( self.root )
Пример #17
0
    def _makeOne(self, id, *args, **kw):
        from Products.CMFCore.PortalFolder import PortalFolder

        return self.site._setObject( id, PortalFolder(id, *args, **kw) )
Пример #18
0
 def __call__( self, id ):
     self._grabbed_with = id
     self._context._setOb( id, PortalFolder( id ) )
     self._context._getOb( id )._setPortalTypeName( 'Grabbed' )
Пример #19
0
 def __call__( self, id ):
     from Products.CMFCore.PortalFolder import PortalFolder
     self._grabbed_with = id
     self._context._setOb( id, PortalFolder( id ) )
     self._context._getOb( id )._setPortalTypeName( 'Grabbed' )
Пример #20
0
 def setUp(self):
     """Setup a site"""
     self.site = site = DummySite('site')
     folder = PortalFolder('test_folder')
     self.folder = site._setObject('test_folder', folder)
Пример #21
0
 def __call__(self, id, title=None, *args, **kw):
     if title is None:
         title = "{0}'s Home".format(id)
     item = PortalFolder(id, title, *args, **kw)
     item.manage_setLocalRoles(id, ['Owner'])
     return item
Пример #22
0
    def test_contentPaste( self ):
        #
        #   Does copy / paste work?
        #
        from Products.CMFCore.PortalFolder import PortalFolder

        test = self.root.test

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

        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' )

        # WAAAA! must get _p_jar set
        # XXX This is broken with ZODB 3.3+, use a subtransaction
        # old, dummy._p_jar = dummy._p_jar, self.root._p_jar
        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' )
Пример #23
0
    def setUp(self):
        from Products.CMFCore.PortalFolder import PortalFolder
        SecurityTest.setUp(self)

        root = self.root
        root._setObject('test', PortalFolder('test', ''))
Пример #24
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')
Пример #25
0
    def setUp(self):
        SecurityTest.setUp(self)

        root = self.root
        root._setObject('test', PortalFolder('test', ''))
Пример #26
0
 def _makeOne(self, id):
     return PortalFolder(id).__of__(self.root)
Пример #27
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
        types_tool._setObject('Dummy Content', DummyFTI)

        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')

        # WAAAA! must get _p_jar set
        old, dummy._p_jar = dummy._p_jar, self.root._p_jar
        try:
            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)
        finally:
            dummy._p_jar = old
        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')