Exemplo n.º 1
0
    def test_tracker261(self):

        #
        #   Tracker issue #261 says that content in a deleted folder
        #   is not being uncatalogued.  Try creating a subfolder with
        #   content object, and test.
        #
        self.root._setObject('test', PortalFolder('test', ''))
        test = self.root.test

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

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

        sub._setObject('foo', DummyContent('foo', 1))
        foo = sub.foo

        assert foo.after_add_called
        assert not foo.before_delete_called
        assert len(catalog) == 1

        foo.reset()
        test.manage_delObjects(ids=['sub'])
        assert not foo.after_add_called
        assert foo.before_delete_called
        assert len(catalog) == 0
Exemplo n.º 2
0
    def test_manageDelObjects( self ):

        test = PortalFolder( 'test', '' )
        self.root._setObject( 'test', test )
        test = self.root.test
        foo = DummyContent( 'foo' )

        test._setObject( 'foo', foo )
        foo.reset()
        test.manage_delObjects( ids=[ 'foo' ] )
        assert not foo.after_add_called
        assert foo.before_delete_called
Exemplo n.º 3
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')
Exemplo n.º 4
0
    def test_manageAddFolder(self):
        #
        #   Does MKDIR/MKCOL intercept work?
        #
        test = PortalFolder('test', '')
        test._setPortalTypeName('Folder')
        self.root._setObject('test', test)
        self.root.reindexObject = lambda: 0
        test = self.root.test

        self.root._setObject('portal_types', TypesTool())
        types_tool = self.root.portal_types
        FTI = FactoryTypeInformation
        types_tool._setObject(
            'Folder',
            FTI(id='Folder',
                meta_type=PortalFolder.meta_type,
                product='CMFCore',
                factory='manage_addPortalFolder'))
        types_tool._setObject(
            'Grabbed',
            FTI('Grabbed',
                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.Type(), 'Folder')
        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='grabbed',
                                    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.Type(), 'Grabbed')
        self.assertEqual(test.indirect.getId(), 'indirect')
        self.assertEqual(test.indirect.Title(), 'Indirect')
Exemplo n.º 5
0
    def test_catalogUnindexAndIndex(self):
        #
        # Test is a new object does get cataloged upon _setObject
        # and uncataloged upon manage_deleteObjects
        #
        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('foo', DummyContent('foo', 1))
        foo = test.foo
        assert foo.after_add_called
        assert not foo.before_delete_called
        assert len(catalog) == 1

        foo.reset()
        test._delObject('foo')
        assert not foo.after_add_called
        assert foo.before_delete_called
        assert len(catalog) == 0
Exemplo n.º 6
0
    def test_manageAddFolder( self ):
        #
        #   Does MKDIR/MKCOL intercept work?
        #
        test = PortalFolder( 'test', '' )
        test._setPortalTypeName( 'Folder' )
        self.root._setObject( 'test', test )
        self.root.reindexObject = lambda: 0
        test = self.root.test

        self.root._setObject( 'portal_types', TypesTool() )
        types_tool = self.root.portal_types
        FTI = FactoryTypeInformation
        types_tool._setObject( 'Folder'
                             , FTI( id='Folder'
                                  , meta_type=PortalFolder.meta_type
                                  , product='CMFCore'
                                  , factory='manage_addPortalFolder'
                                  )
                             )
        types_tool._setObject( 'Grabbed'
                             , FTI( 'Grabbed'
                                  , 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.Type(), 'Folder' )
        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 = 'grabbed'
                                   , 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.Type(), 'Grabbed' )
        self.assertEqual( test.indirect.getId(), 'indirect' )
        self.assertEqual( test.indirect.Title(), 'Indirect' )
Exemplo n.º 7
0
    def test_otherFolderTypes(self):
        """
            Does 'invokeFactory' work when invoked from non-PortalFolder?
        """
        self.root._setObject('portal', PortalFolder('portal', ''))
        portal = self.root.portal
        portal._setObject('normal', OFS.Folder.Folder('normal', ''))
        normal = portal.normal

        normal.invokeFactory('Dummy', 'dummy')
        assert 'dummy' not in portal.objectIds()
        assert 'dummy' in normal.objectIds()
Exemplo n.º 8
0
 def setUp(self):
     get_transaction().begin()
     self._policy = UnitTestSecurityPolicy()
     self._oldPolicy = SecurityManager.setSecurityPolicy(self._policy)
     self.connection = Zope.DB.open()
     self.root = self.connection.root()['Application']
     self.manager = UnitTestUser().__of__(self.root)
     self.member = LimitedUnitTestUser().__of__(self.root)
     self.root._setObject('folder', PortalFolder('folder', ''))
     self.folder = self.root.folder
     self.folder._setObject('doc1', DummyContent('doc1'))
     self.folder._setObject('doc2', DummyContent('doc2'))
     self.folder._setObject('doc3', DummyContent('doc3'))
Exemplo n.º 9
0
 def off_test_otherFolderTypes(self):
     """
         Does 'invokeFactory' work when invoked from non-PortalFolder?
         Currently tests a bug which hasn't been fixed (remove 'off_'
         from name to activate)            
     """
     self.root._setObject('portal', PortalFolder('portal', ''))
     portal = self.root.portal
     portal._setObject('normal', OFS.Folder.Folder('normal', ''))
     normal = portal.normal
     normal.invokeFactory('Dummy', 'dummy')
     assert 'dummy' not in portal.objectIds()
     assert 'dummy' in normal.objectIds()
Exemplo n.º 10
0
    def test_deletePropagation(self):

        test = PortalFolder('test', '')
        self.root._setObject('test', test)
        test = self.root.test
        foo = DummyContent('foo')

        foo.reset()
        assert not foo.after_add_called
        assert not foo.before_delete_called
        test._setObject('foo', foo)
        assert foo.after_add_called
        assert not foo.before_delete_called

        foo.reset()
        test._delObject('foo')
        assert not foo.after_add_called
        assert foo.before_delete_called

        foo.reset()
        test._setObject('foo', foo)
        test._delOb('foo')  # doesn't propagate
        assert foo.after_add_called
        assert not foo.before_delete_called
Exemplo n.º 11
0
    def test_manageDelObjects(self):

        test = PortalFolder('test', '')
        self.root._setObject('test', test)
        test = self.root.test
        foo = DummyContent('foo')

        test._setObject('foo', foo)
        foo.reset()
        test.manage_delObjects(ids=['foo'])
        assert not foo.after_add_called
        assert foo.before_delete_called
Exemplo n.º 12
0
    def test_deletePropagation( self ):

        test = PortalFolder( 'test', '' )
        self.root._setObject( 'test', test )
        test = self.root.test
        foo = DummyContent( 'foo' )

        foo.reset()
        assert not foo.after_add_called
        assert not foo.before_delete_called
        test._setObject( 'foo', foo )
        assert foo.after_add_called
        assert not foo.before_delete_called

        foo.reset()
        test._delObject( 'foo' )
        assert not foo.after_add_called
        assert foo.before_delete_called

        foo.reset()
        test._setObject( 'foo', foo )
        test._delOb( 'foo' )    # doesn't propagate
        assert foo.after_add_called
        assert not foo.before_delete_called
Exemplo n.º 13
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', 'actions_dummy')
        dummy = portal._getOb('actions_dummy')

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

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

        assert default_view == 'view'
        assert custom_view == 'view2'
        assert unpermitted_view != 'edit'
        assert unpermitted_view == 'view'
Exemplo n.º 14
0
 def __call__(self, id):
     self._grabbed_with = id
     self._context._setOb(id, PortalFolder(id))
     self._context._getOb(id)._setPortalTypeName('Grabbed')
Exemplo n.º 15
0
 def setupMembersFolder(self, p):
     PortalFolder.manage_addPortalFolder(p, 'Members')
     p.Members.manage_addProduct['OFSP'].manage_addDTMLMethod(
         'index_html', 'Member list', '<dtml-return roster>')
Exemplo n.º 16
0
 def setupMembersFolder(self, p):
     PortalFolder.manage_addPortalFolder(p, 'Members')
     p.Members.manage_addProduct['OFSP'].manage_addDTMLMethod(
         'index_html', 'Member list', '<dtml-return roster>')
Exemplo n.º 17
0
    def test_contentPaste(self):
        #
        #   Does copy / paste work?
        #
        #import pdb; pdb.set_trace()
        test = PortalFolder('test', '')
        self.root._setObject('test', test)
        test = self.root.test

        self.root._setObject('portal_types', TypesTool())
        types_tool = self.root.portal_types
        FTI = FactoryTypeInformation
        types_tool._setObject(
            'Dummy',
            FTI('Dummy',
                meta_type=DummyContent.meta_type,
                product='OFSP',
                factory='addDTMLDocument'))

        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', 1))
        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.
        #import pdb; pdb.set_trace()
        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')

        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')
Exemplo n.º 18
0
    def test_contentPaste( self ):
        #
        #   Does copy / paste work?
        #
        #import pdb; pdb.set_trace()
        test = PortalFolder( 'test', '' )
        self.root._setObject( 'test', test )
        test = self.root.test

        self.root._setObject( 'portal_types', TypesTool() )
        types_tool = self.root.portal_types
        FTI = FactoryTypeInformation
        types_tool._setObject( 'Dummy'
                             , FTI( 'Dummy'
                                  , meta_type=DummyContent.meta_type
                                  , product='OFSP'
                                  , factory='addDTMLDocument'
                                  )
                             )

        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', 1 ) )
        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.
        #import pdb; pdb.set_trace()
        sub2.all_meta_types = sub2.all_meta_types() + 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' )

        cookie = sub1.manage_cutObjects( ids = ( 'dummy', ) )
        # Waaa! force sub2 to allow paste of Dummy object.
        sub3.all_meta_types = sub3.all_meta_types() + 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' )