Exemplo n.º 1
0
    def _initSite(self, foo=2):
        site = Folder(id='site').__of__(self.app)
        ctool = CatalogTool()
        getSiteManager().registerUtility(ctool, ICatalogTool)

        for obj_id in ctool.objectIds():
            ctool._delObject(obj_id)
        for idx_id in ctool.indexes():
            ctool.delIndex(idx_id)
        for col in list(ctool.schema()):
            ctool.delColumn(col)

        if foo > 0:
            ctool._setObject('foo_plexicon', PLexicon('foo_plexicon'))
            lex = ctool.foo_plexicon
            lex._pipeline = (Splitter(), CaseNormalizer(), StopWordRemover())

            extra = _extra()
            extra.lexicon_id = 'foo_plexicon'
            extra.index_type = 'Okapi BM25 Rank'
            ctool.addIndex('foo_zctext', 'ZCTextIndex', extra)

            ctool.addColumn('foo_zctext')

        return site, ctool
Exemplo n.º 2
0
    def setUp(self):
        from Products.CMFCore.CatalogTool import CatalogTool
        from Products.CMFCore.utils import registerToolInterface
        from Products.CMFUid.interfaces import IUniqueIdHandler
        from Products.CMFUid.UniqueIdAnnotationTool \
            import UniqueIdAnnotationTool
        from Products.CMFUid.UniqueIdGeneratorTool \
            import UniqueIdGeneratorTool

        SecurityTest.setUp(self)
        self.app._setObject('dummy', DummyContent(id='dummy'))
        self.app._setObject('dummy2', DummyContent(id='dummy2'))
        self.ctool = CatalogTool().__of__(self.app)
        self.uidhandler = self._makeOne()
        sm = getSiteManager()
        sm.registerUtility(self.ctool, ICatalogTool)
        registerToolInterface('portal_catalog', ICatalogTool)
        sm.registerUtility(self.uidhandler, IUniqueIdHandler)
        sm.registerUtility(UniqueIdAnnotationTool(),
                           IUniqueIdAnnotationManagement)
        sm.registerUtility(UniqueIdGeneratorTool(), IUniqueIdGenerator)
        sm.registerUtility(provided=IPortalCatalogQueueProcessor,
                           factory=PortalCatalogProcessor)

        # Make sure we have our indices/columns
        uid_name = self.uidhandler.UID_ATTRIBUTE_NAME
        self.ctool.addIndex(uid_name, 'FieldIndex')
        self.ctool.addColumn(uid_name)
Exemplo n.º 3
0
    def test_catalogUnindexAndIndex(self):
        #
        # Test is a new object does get cataloged upon _setObject
        # and uncataloged upon manage_deleteObjects
        #
        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', catalog=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.º 4
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.º 5
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.
        #
        from Products.CMFCore.PortalFolder import PortalFolder

        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( 'sub', PortalFolder( 'sub', '' ) )
        sub = test.sub

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

        self.failUnless( foo.after_add_called )
        self.failIf( foo.before_delete_called )
        self.assertEqual( len(ctool), 1 )

        foo.reset()
        test.manage_delObjects( ids=['sub'] )
        self.failIf( foo.after_add_called )
        self.failUnless( foo.before_delete_called )
        self.assertEqual( len(ctool), 0 )
Exemplo n.º 6
0
    def test_folderMove(self):
        #
        #   Does the catalog stay synched when folders are moved?
        #
        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
        assert 'foo' in catalog.uniqueValuesFor('id')
        assert has_path(catalog._catalog, '/test/folder/sub/foo')

        # WAAAA! must get _p_jar set
        old, sub._p_jar = sub._p_jar, self.root._p_jar
        try:
            folder.manage_renameObject(id='sub', new_id='new_sub')
        finally:
            sub._p_jar = old
        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', catalog=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())

        # WAAAA! must get _p_jar set
        old, bar._p_jar = sub._p_jar, self.root._p_jar
        try:
            cookie = folder.manage_cutObjects(ids=['bar'])
            sub2.manage_pasteObjects(cookie)
        finally:
            bar._p_jar = old

        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.º 7
0
    def test_itemCataloguing(self):
        ctool = self.site._setObject('portal_catalog', CatalogTool())
        dtool = self.site.portal_discussion
        catalog = ctool._catalog
        test = self._makeDummyContent('test', catalog=1)
        test.allow_discussion = 1

        self.assertEqual(len(ctool), 1)
        self.failUnless(has_path(catalog, test.getPhysicalPath()))
        talkback = dtool.getDiscussionFor(test)
        self.assertEqual(talkback.getPhysicalPath(),
                         ('', 'bar', 'site', 'test', 'talkback'))
        talkback.createReply(title='test', text='blah')
        self.assertEqual(len(ctool), 2)
        for reply in talkback.getReplies():
            self.failUnless(has_path(catalog, reply.getPhysicalPath()))
            self.failUnless(
                has_path(catalog,
                         '/bar/site/test/talkback/%s' % reply.getId()))

        reply1 = talkback.getReplies()[0]
        talkback1 = dtool.getDiscussionFor(reply1)
        talkback1.createReply(title='test2', text='blah2')
        for reply in talkback.getReplies():
            self.failUnless(has_path(catalog, reply.getPhysicalPath()))
            self.failUnless(
                has_path(catalog,
                         '/bar/site/test/talkback/%s' % reply.getId()))
        for reply in talkback1.getReplies():
            self.failUnless(has_path(catalog, reply.getPhysicalPath()))
            self.failUnless(
                has_path(catalog,
                         '/bar/site/test/talkback/%s' % reply.getId()))
Exemplo n.º 8
0
    def test_convertQuery(self):
        convert = CatalogTool()._convertQuery

        kw = {}
        convert(kw)
        self.assertEqual(kw, {})

        kw = {'expires': 5, 'expires_usage': 'brrr:min'}
        self.assertRaises(ValueError, convert, kw)

        kw = {'foo': 'bar'}
        convert(kw)
        self.assertEqual(kw, {'foo': 'bar'})

        kw = {'expires': 5, 'expires_usage': 'range:min'}
        convert(kw)
        self.assertEqual(kw, {'expires': {'query': 5, 'range': 'min'}})

        kw = {'expires': 5, 'expires_usage': 'range:max'}
        convert(kw)
        self.assertEqual(kw, {'expires': {'query': 5, 'range': 'max'}})

        kw = {'expires': (5, 7), 'expires_usage': 'range:min:max'}
        convert(kw)
        self.assertEqual(kw,
                         {'expires': {
                             'query': (5, 7),
                             'range': 'min:max'
                         }})
Exemplo n.º 9
0
    def setUp(self):
        from Products.CMFCore.CatalogTool import CatalogTool
        from Products.CMFUid.UniqueIdAnnotationTool \
                import UniqueIdAnnotationTool
        from Products.CMFUid.UniqueIdGeneratorTool \
                import UniqueIdGeneratorTool
        SecurityTest.setUp(self)
        self.root._setObject('portal_catalog', CatalogTool())
        self.root._setObject('portal_uidgenerator', UniqueIdGeneratorTool())
        self.root._setObject('portal_uidannotation', UniqueIdAnnotationTool())
        self.root._setObject('portal_uidhandler', self._getTargetClass()())
        self.root._setObject('dummy', DummyContent(id='dummy'))
        self.root._setObject('dummy2', DummyContent(id='dummy2'))

        sm = getSiteManager()
        sm.registerUtility(self.root.portal_uidannotation,
                           IUniqueIdAnnotationManagement)
        sm.registerUtility(self.root.portal_uidgenerator, IUniqueIdGenerator)

        if indexing:
            sm.registerUtility(provided=IPortalCatalogQueueProcessor,
                               factory=PortalCatalogProcessor)

        # Make sure we have our indices/columns
        uid_name = self.root.portal_uidhandler.UID_ATTRIBUTE_NAME
        self.root.portal_catalog.addIndex(uid_name, 'FieldIndex')
        self.root.portal_catalog.addColumn(uid_name)
Exemplo n.º 10
0
    def test_search_anonymous(self):
        catalog = CatalogTool()
        dummy = DummyContent(catalog=1)
        catalog.catalog_object(dummy, '/dummy')

        self.assertEqual(1, len(catalog._catalog.searchResults()))
        self.assertEqual(0, len(catalog.searchResults()))
Exemplo n.º 11
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
        assert 'foo' in catalog.uniqueValuesFor( 'id' )
        assert has_path( catalog._catalog, '/test/folder/sub/foo' )

        # WAAAA! must get _p_jar set
        # XXX This is broken with ZODB 3.3+, use a subtransaction
        # old, sub._p_jar = sub._p_jar, self.root._p_jar
        get_transaction().commit(1)
        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', catalog=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() )

        # WAAAA! must get _p_jar set
        # XXX This is broken with ZODB 3.3+, use a subtransaction
        # old, bar._p_jar = sub._p_jar, self.root._p_jar
        get_transaction().commit(1)
        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.º 12
0
    def test_contentPaste(self):
        #
        #   Does copy / paste work?
        #
        sm = getSiteManager(self.site)
        ctool = self.site._setObject( 'portal_catalog', CatalogTool() )
        sm.registerUtility(ctool, ICatalogTool)
        ttool = self.site._setObject( 'portal_types', TypesTool() )
        sm.registerUtility(ttool, ITypesTool)
        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.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.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') )
Exemplo n.º 13
0
 def setUp(self):
     SecurityTest.setUp(self)
     self.root._setObject('portal_catalog', CatalogTool())
     self.root._setObject('portal_uidgenerator', UniqueIdGeneratorTool())
     self.root._setObject('portal_uidhandler', UniqueIdHandlerTool())
     self.root._setObject('dummy', DummyContent(id='dummy'))
     self.uid_attr_name = self.root.portal_uidhandler._UID_ATTRIBUTE_NAME
     setupIndexes(self.root.portal_catalog, self.uid_attr_name)
Exemplo n.º 14
0
 def setUp(self):
     SecurityTest.setUp(self)
     self.root._setObject('portal_catalog', CatalogTool())
     self.root._setObject('portal_uidgenerator', UniqueIdGeneratorTool())
     self.root._setObject('portal_uidannotation', UniqueIdAnnotationTool())
     self.root._setObject('portal_uidhandler', UniqueIdHandlerTool())
     self.root._setObject('dummy', DummyContent(id='dummy'))
     
     removeUnnecessaryIndexes(self.root.portal_catalog)
Exemplo n.º 15
0
def backlinkTools():
    import Products.CMFCore.utils
    Products.CMFCore.utils.getToolByName = getToolByName
    from Products.CMFCore.CatalogTool import CatalogTool
    from Products.Archetypes.ReferenceEngine import ReferenceCatalog, UIDCatalog
    return dict(portal_workflow=None,
                portal_catalog=CatalogTool(),
                reference_catalog=ReferenceCatalog(id='portal_reference'),
                portal_uid=UIDCatalog(id='portal_uid'))
Exemplo n.º 16
0
    def test_processActions(self):
        """
            Tracker #405:  CatalogTool doesn't accept optional third
            argument, 'idxs', to 'catalog_object'.
        """
        tool = CatalogTool()
        dummy = DummyContent(catalog=1)

        tool.catalog_object(dummy, '/dummy')
        tool.catalog_object(dummy, '/dummy', ['SearchableText'])
Exemplo n.º 17
0
 def setUp(self):
     self.site = DummySite('site')
     self.site._path = ''
     self.site._setObject('portal_catalog', CatalogTool())
     self.site.portal_catalog.addIndex('state', 'KeywordIndex')
     self.site._setObject('portal_types', DummyTool())
     self.site._setObject('portal_workflow', WorkflowTool())
     self.site._setObject('dummy', DummyContent('dummy'))
     self.site.dummy.state = 'private'
     self.site.portal_catalog.catalog_object(self.site.dummy)
     self._constructDummyWorkflow()
Exemplo n.º 18
0
    def test_deletePropagation(self):
        ctool = self.site._setObject('portal_catalog', CatalogTool())
        dtool = self.site.portal_discussion
        test = self._makeDummyContent('test', catalog=1)
        test.allow_discussion = 1

        talkback = dtool.getDiscussionFor(test)
        talkback.createReply(title='test', text='blah')
        self.assertEqual(len(ctool), 2)
        self.site._delObject('test')
        self.assertEqual(len(ctool), 0)
Exemplo n.º 19
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', CatalogTool())
     wftool = self.site._setObject('portal_workflow', WorkflowTool())
     test = self._makeOne('test')
     wftool.notifyCreated(test)
     self.assertEqual(len(ctool), 0)
Exemplo n.º 20
0
    def test_folderMove(self):
        #
        #   Does the catalog stay synched when folders are moved?
        #
        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')
Exemplo n.º 21
0
    def test_deletePropagation(self):
        ctool = CatalogTool()
        getSiteManager().registerUtility(ctool, ICatalogTool)
        dtool = self.dtool
        test = self._makeDummyContent('test', catalog=1)
        test.allow_discussion = 1

        talkback = dtool.getDiscussionFor(test)
        talkback.createReply(title='test', text='blah')
        self.assertEqual(len(ctool), 2)
        self.site._delObject('test')
        self.assertEqual(len(ctool), 0)
Exemplo n.º 22
0
 def setUp(self):
     from Products.CMFCore.CatalogTool import CatalogTool
     from Products.CMFUid.UniqueIdAnnotationTool \
             import UniqueIdAnnotationTool
     from Products.CMFUid.UniqueIdGeneratorTool \
             import UniqueIdGeneratorTool
     SecurityTest.setUp(self)
     self.root._setObject('portal_catalog', CatalogTool())
     self.root._setObject('portal_uidgenerator', UniqueIdGeneratorTool())
     self.root._setObject('portal_uidannotation', UniqueIdAnnotationTool())
     self.root._setObject('portal_uidhandler', self._getTargetClass()())
     self.root._setObject('dummy', DummyContent(id='dummy'))
     self.root._setObject('dummy2', DummyContent(id='dummy2'))
Exemplo n.º 23
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') )
Exemplo n.º 24
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
Exemplo n.º 25
0
    def test_deleteReplies(self):
        sm = getSiteManager()
        dtool = self.site.portal_discussion
        ctool = self.site._setObject( 'portal_catalog', CatalogTool() )
        sm.registerUtility(ctool, ICatalogTool)
        test = self._makeDummyContent('test')
        test.allow_discussion = 1

        # Create a structure 6 levels deep for testing
        talkback = dtool.getDiscussionFor(test)
        id1 = talkback.createReply(title='test1', text='blah')
        reply1 = talkback.getReply(id1)
        talkback1 = dtool.getDiscussionFor(reply1)
        id2 = talkback1.createReply(title='test2', text='blah')
        reply2 = talkback1.getReply(id2)
        talkback2 = dtool.getDiscussionFor(reply2)
        id3 = talkback2.createReply(title='test3', text='blah')
        reply3 = talkback2.getReply(id3)
        talkback3 = dtool.getDiscussionFor(reply3)
        id4 = talkback3.createReply(title='test4', text='blah')
        reply4 = talkback3.getReply(id4)
        talkback4 = dtool.getDiscussionFor(reply4)
        id5 = talkback4.createReply(title='test5', text='blah')
        reply5 = talkback4.getReply(id5)
        talkback5 = dtool.getDiscussionFor(reply5)
        id6 = talkback5.createReply(title='test6', text='blah')
        reply6 = talkback5.getReply(id6)
        talkback6 = dtool.getDiscussionFor(reply6)

        self.assertEqual(len(talkback.getReplies()), 1)
        self.assertEqual(len(talkback1.getReplies()), 1)
        self.assertEqual(len(talkback2.getReplies()), 1)
        self.assertEqual(len(talkback3.getReplies()), 1)
        self.assertEqual(len(talkback4.getReplies()), 1)
        self.assertEqual(len(talkback5.getReplies()), 1)
        self.assertEqual(len(talkback6.getReplies()), 0)
        self.assertEqual(len(ctool), 7)

        talkback3.deleteReply(id4)
        self.assertEqual(len(talkback.getReplies()), 1)
        self.assertEqual(len(talkback1.getReplies()), 1)
        self.assertEqual(len(talkback2.getReplies()), 1)
        self.assertEqual(len(talkback3.getReplies()), 0)
        self.assertEqual(len(ctool), 4)

        talkback.deleteReply(id1)
        self.assertEqual(len(talkback.getReplies()), 0)
        self.assertEqual(len(ctool), 1)
Exemplo n.º 26
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_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')

        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() + 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.º 27
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' ) )
Exemplo n.º 28
0
    def test_itemCataloguing(self):
        ctool = CatalogTool()
        ctool.addColumn('in_reply_to')
        getSiteManager().registerUtility(ctool, ICatalogTool)
        dtool = self.dtool
        test = self._makeDummyContent('test', catalog=1)
        test.allow_discussion = 1

        self.assertEqual( len(ctool), 1 )
        self.failUnless(has_path(ctool, test.getPhysicalPath()))
        talkback = dtool.getDiscussionFor(test)
        self.assertEqual( talkback.getPhysicalPath(),
                          ('', 'bar', 'site', 'test', 'talkback') )
        talkback.createReply( title='test'
                            , text='blah'
                            )
        self.assertEqual( len(ctool), 2 )
        for reply in talkback.getReplies():
            self.failUnless(has_path(ctool, reply.getPhysicalPath()))
            self.failUnless(has_path(ctool, '/bar/site/test/talkback/%s'
                                            % reply.getId()))

        reply1 = talkback.getReplies()[0]
        path1 = '/'.join(reply1.getPhysicalPath())
        self.assertEqual( ctool.getMetadataForUID(path1),
                          {'in_reply_to': None} )

        talkback1 = dtool.getDiscussionFor(reply1)
        talkback1.createReply( title='test2'
                             , text='blah2'
                             )
        for reply in talkback.getReplies():
            self.failUnless(has_path(ctool, reply.getPhysicalPath()))
            self.failUnless(has_path(ctool, '/bar/site/test/talkback/%s'
                                            % reply.getId()))
        for reply in talkback1.getReplies():
            self.failUnless(has_path(ctool, reply.getPhysicalPath()))
            self.failUnless(has_path(ctool, '/bar/site/test/talkback/%s'
                                            % reply.getId()))

        reply2 = talkback1.getReplies()[0]
        path2 = '/'.join(reply2.getPhysicalPath())
        self.assertEqual( ctool.getMetadataForUID(path2),
                          {'in_reply_to': reply1.getId()} )
Exemplo n.º 29
0
    def test_search_inactive(self):
        catalog = CatalogTool()
        now = DateTime()
        dummy = DummyContent(catalog=1)
        dummy._View_Permission = ('Blob', )

        self.loginWithRoles('Blob')

        # not yet effective
        dummy.effective = now + 1
        dummy.expires = now + 2
        catalog.catalog_object(dummy, '/dummy')
        self.assertEqual(1, len(catalog._catalog.searchResults()))
        self.assertEqual(0, len(catalog.searchResults()))

        # already expired
        dummy.effective = now - 2
        dummy.expires = now - 1
        catalog.catalog_object(dummy, '/dummy')
        self.assertEqual(1, len(catalog._catalog.searchResults()))
        self.assertEqual(0, len(catalog.searchResults()))
Exemplo n.º 30
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 )