示例#1
0
    def test_isActionSupported(self):

        wf = self._getDummyWorkflow()
        dummy = self.site._setObject('dummy', DummyContent())

        # check publish
        self.assert_(wf.isActionSupported(dummy, 'publish'))

        # Check with kwargs.
        self.assert_(wf.isActionSupported(dummy, 'publish', arg1=1, arg2=2))
示例#2
0
 def test_wrapping2(self):
     # DummyContent does not implement IIndexableObject
     # no wrapper registered - should fall back to using
     # wrapper class directly
     dummy = DummyContent(catalog=1)
     ctool = self._makeOne()
     ctool.addIndex('meta_type', 'FieldIndex')
     ctool.catalog_object(dummy, '/dummy')
     query = {'meta_type': 'Dummy'}
     self.assertEqual(1, len(ctool._catalog.searchResults(query)))
示例#3
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' ] )
示例#4
0
    def test_manageDelObjects( self ):

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

        ttool = self.site._setObject('portal_types', TypesTool())
        ctool = self.site._setObject('portal_catalog', DummyCatalogTool())
        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(has_id(ctool, 'foo'))
        self.failUnless(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.failUnless(has_id(ctool, 'foo'))
        self.failUnless(has_path(ctool, '/bar/site/folder/new_sub/foo'))

        folder._setObject('bar', DummyContent('bar', catalog=1))
        self.assertEqual(len(ctool), 2)
        self.failUnless(has_id(ctool, 'bar'))
        self.failUnless(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.failUnless(has_id(ctool, 'foo'))
        self.failUnless(has_id(ctool, 'bar'))
        self.assertEqual(len(ctool), 2)
        self.failUnless(has_path(ctool, '/bar/site/folder/sub2/bar'))
    def test_provided(self):
        from Products.CMFCore.interfaces import IContentish
        from plone.indexer.interfaces import IIndexableObjectWrapper
        from Products.CMFCore.tests.base.dummy import DummyContent

        obj = DummyContent()
        w = IndexableObjectWrapper(obj, self.portal.portal_catalog)

        self.assertTrue(IIndexableObjectWrapper.providedBy(w))
        self.assertTrue(IContentish.providedBy(w))
示例#8
0
    def test_events(self):
        events = []

        @adapter(IBeforeTransitionEvent)
        def _handleBefore(event):
            events.append(event)
        provideHandler(_handleBefore)

        @adapter(IAfterTransitionEvent)
        def _handleAfter(event):
            events.append(event)
        provideHandler(_handleAfter)

        wf = self._getDummyWorkflow()

        dummy = self.site._setObject( 'dummy', DummyContent() )
        wf.doActionFor(dummy, 'publish', comment='foo', test='bar')

        self.assertEquals(4, len(events))

        evt = events[0]
        self.failUnless(IBeforeTransitionEvent.providedBy(evt))
        self.assertEquals(dummy, evt.object)
        self.assertEquals('private', evt.old_state.id)
        self.assertEquals('private', evt.new_state.id)
        self.assertEquals(None, evt.transition)
        self.assertEquals({}, evt.status)
        self.assertEquals(None, evt.kwargs)

        evt = events[1]
        self.failUnless(IAfterTransitionEvent.providedBy(evt))
        self.assertEquals(dummy, evt.object)
        self.assertEquals('private', evt.old_state.id)
        self.assertEquals('private', evt.new_state.id)
        self.assertEquals(None, evt.transition)
        self.assertEquals({'state': 'private', 'comments': ''}, evt.status)
        self.assertEquals(None, evt.kwargs)

        evt = events[2]
        self.failUnless(IBeforeTransitionEvent.providedBy(evt))
        self.assertEquals(dummy, evt.object)
        self.assertEquals('private', evt.old_state.id)
        self.assertEquals('published', evt.new_state.id)
        self.assertEquals('publish', evt.transition.id)
        self.assertEquals({'state': 'private', 'comments': ''}, evt.status)
        self.assertEquals({'test' : 'bar', 'comment' : 'foo'}, evt.kwargs)

        evt = events[3]
        self.failUnless(IAfterTransitionEvent.providedBy(evt))
        self.assertEquals(dummy, evt.object)
        self.assertEquals('private', evt.old_state.id)
        self.assertEquals('published', evt.new_state.id)
        self.assertEquals('publish', evt.transition.id)
        self.assertEquals({'state': 'published', 'comments': 'foo'}, evt.status)
        self.assertEquals({'test' : 'bar', 'comment' : 'foo'}, evt.kwargs)
示例#9
0
    def setUp(self):
        import Products.isurlinportal

        # Patch get_external_sites to return a fixed list of sites.
        self._original_get_external_sites = Products.isurlinportal.get_external_sites
        Products.isurlinportal.get_external_sites = dummy_get_external_sites

        # Create dummy site and content.
        self.site = DummySite(id="foo")
        self.site._setObject("foo", DummyFolder(id="foo"))
        self.site.foo._setObject("doc1", DummyContent(id="doc1"))
示例#10
0
    def test_manageDelObjects(self):
        acl_users = self.site._setObject('acl_users', DummyUserFolder())
        newSecurityManager(None, acl_users.all_powerful_Oz)
        test = self._makeOne('test')
        foo = DummyContent('foo')

        test._setObject('foo', foo)
        foo.reset()
        test.manage_delObjects(ids=['foo'])
        self.assertFalse(foo.after_add_called)
        self.assertTrue(foo.before_delete_called)
示例#11
0
    def test_doActionFor(self):
        wtool = self.wtool
        wf = self._getDummyWorkflow()

        dummy = self.site._setObject( 'dummy', DummyContent() )
        wtool.notifyCreated(dummy)
        self.assertEqual( wf._getStatusOf(dummy),
                          {'state': 'private', 'comments': ''} )
        wf.doActionFor(dummy, 'publish', comment='foo' )
        self.assertEqual( wf._getStatusOf(dummy),
                          {'state': 'published', 'comments': 'foo'} )
示例#12
0
 def test_content_methods(self):
     url_tool = self._makeOne()
     self.site._setObject( 'folder', DummyFolder(id='buz') )
     self.site.folder._setObject( 'item', DummyContent(id='qux.html') )
     obj = self.site.folder.item
     self.assertEqual( url_tool.getRelativeContentPath(obj)
                     , ('buz', 'qux.html') )
     self.assertEqual( url_tool.getRelativeContentURL(obj)
                     , 'buz/qux.html' )
     self.assertEqual( url_tool.getRelativeUrl(obj)
                     , 'buz/qux.html' )
示例#13
0
    def test_processActions(self):
        """
            Tracker #405:  CatalogTool doesn't accept optional third
            argument, 'idxs', to 'catalog_object'.
        """
        tool = self._makeOne()
        tool.addIndex('SearchableText', 'KeywordIndex')
        dummy = DummyContent(catalog=1)

        tool.catalog_object( dummy, '/dummy' )
        tool.catalog_object( dummy, '/dummy', [ 'SearchableText' ] )
示例#14
0
    def test_search_member_wo_valid_roles(self):
        catalog = self._makeOne()
        catalog.addIndex('allowedRolesAndUsers', 'KeywordIndex')
        dummy = DummyContent(catalog=1)
        dummy._View_Permission = ('Blob',)
        catalog.catalog_object(dummy, '/dummy')

        self.loginWithRoles('Waggle')

        self.assertEqual(1, len(catalog._catalog.searchResults()))
        self.assertEqual(0, len(catalog.searchResults()))
示例#15
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()
    def test_isActionSupported(self):

        wf = self._getDummyWorkflow()
        dummy = self.site._setObject('dummy', DummyContent())

        for action in (
                'submit',
                'retract',
                'publish',
                'reject',
        ):
            self.assertTrue(wf.isActionSupported(dummy, action))
示例#17
0
    def _setupCallTests(self, aliases):
        # root
        root = Folder('root')

        # set up dummy type info with problematic double-default alias
        root._setObject('portal_types', DummyTool())
        root.portal_types._type_actions = aliases

        # dummy content and skin
        root._setObject('dummycontent', DummyContent())
        root._setObject('dummy_view', DummyObject())
        return root.dummycontent
示例#18
0
    def test_isActionSupported_with_keywargs(self):

        wf = self._getDummyWorkflow()
        dummy = self.site._setObject('dummy', DummyContent())

        for action in (
                'submit',
                'retract',
                'publish',
                'reject',
        ):
            self.assert_(wf.isActionSupported(dummy, action, arg1=1, arg2=2))
示例#19
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])
示例#20
0
    def setUp(self):
        SecurityTest.setUp(self)
        self.root._setObject('portal_uidannotation', self._getTargetClass()())
        self.root._setObject('portal_uidhandler', DummyUniqueIdHandlerTool())

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

        self.root._setObject('dummy', DummyContent(id='dummy'))
        self.root._setObject('site', SimpleFolder('site'))

        transaction.savepoint(optimistic=True)
示例#21
0
    def test_listActions(self):
        """test that a full set of context information is passed
           by the types tool
        """
        tool = self.ttool
        ti = ActionTesterTypeInfo()
        setattr( tool, 'Dummy Content', ti )

        dummy = self.site._setObject('dummy', DummyContent('dummy'))
        tool.listActions('fake_info', dummy)

        self.assertEqual(ti._action_info, 'fake_info')
        self.assertEqual(ti._action_obj, dummy)
示例#22
0
    def test_refreshCatalog(self):
        site = DummySite('site').__of__(self.root)
        site._setObject('dummy', DummyContent(catalog=1))
        site._setObject('portal_catalog', self._makeOne())
        ctool = site.portal_catalog
        ctool.catalog_object(site.dummy, '/dummy')

        self.assertEqual(1, len(ctool._catalog.searchResults()))
        ctool.refreshCatalog(clear=1)
        self.assertEqual(1, len(ctool._catalog.searchResults()),
                         'CMF Collector issue #379 (\'Update Catalog\' '
                         'fails): %s entries after refreshCatalog'
                         % (len(ctool._catalog.searchResults()),))
示例#23
0
    def _setupCallTests(self, aliases):
        # root
        root = Folder('root')

        # set up dummy type info with problematic double-default alias
        ttool = DummyTool()
        ttool._type_actions = aliases
        getSiteManager().registerUtility(ttool, ITypesTool)

        # dummy content and skin
        root._setObject('dummycontent', DummyContent())
        root._setObject('dummy_view', DummyObject())
        return root.dummycontent
示例#24
0
    def test_simulateNestedFolderCloneRemovingUid1(self):
        self.root._setObject('foo', PortalFolder(id='foo'))
        foo = self.root.foo
        foo._setObject('sub1', PortalFolder(id='sub1'))
        foo.sub1._setObject('sub2', PortalFolder(id='sub2'))
        foo.sub1.sub2._setObject('baz', DummyContent(id='baz', catalog=1))
        baz = foo.sub1.sub2.baz
        annotation = self.root.portal_uidannotation(baz, UID_ATTRNAME)
        self.assertEqual(getattr(baz, UID_ATTRNAME), annotation)

        notify(ObjectAddedEvent(foo, foo))
        notify(ObjectClonedEvent(foo))
        self.assertRaises(AttributeError, getattr, baz, UID_ATTRNAME)
示例#25
0
    def setUp(self):
        from Products.CMFUid.interfaces import IUniqueIdAnnotationManagement

        SecurityTest.setUp(self)
        self.uidannotation = self._makeOne()
        sm = getSiteManager()
        sm.registerUtility(self.uidannotation, IUniqueIdAnnotationManagement)
        sm.registerUtility(DummyUniqueIdHandlerTool(), IUniqueIdHandler)

        self.app._setObject('dummy', DummyContent(id='dummy'))
        self.app._setObject('site', Folder('site'))

        transaction.savepoint(optimistic=True)
示例#26
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)

        # 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)
示例#27
0
    def test_listActions(self):
        """test that a full set of context information is passed
           by the types tool
        """
        from Products.CMFCore.tests.base.dummy import DummyContent
        tool = self.ttool
        ti = self._makeDummyTypeInfo()
        setattr(tool, 'Dummy Content', ti)

        dummy = self.site._setObject('dummy', DummyContent('dummy'))
        tool.listActions('fake_info', dummy)

        self.assertEqual(ti._action_info, 'fake_info')
        self.assertEqual(ti._action_obj, dummy)
示例#28
0
    def test_contents_methods(self):
        sm = getSiteManager(self.site)
        ttool = self.site._setObject( 'portal_types', TypesTool() )
        sm.registerUtility(ttool, ITypesTool)
        f = self._makeOne('foo')
        self.assertEqual( f.objectValues(), [] )
        self.assertEqual( f.contentIds(), [] )
        self.assertEqual( f.contentItems(), [] )
        self.assertEqual( f.contentValues(), [] )
        self.assertEqual( f.listFolderContents(), [] )
        self.assertEqual( f.listDAVObjects(), [] )

        f._setObject('sub1', DummyContent('sub1') )
        self.assertEqual( f.objectValues(), [f.sub1] )
        self.assertEqual( f.contentIds(), [] )
        self.assertEqual( f.contentItems(), [] )
        self.assertEqual( f.contentValues(), [] )
        self.assertEqual( f.listFolderContents(), [] )
        self.assertEqual( f.listDAVObjects(), [f.sub1] )

        fti = FTIDATA_DUMMY[0].copy()
        ttool._setObject( 'Dummy Content', FTI(**fti) )
        self.assertEqual( f.objectValues(), [f.sub1] )
        self.assertEqual( f.contentIds(), ['sub1'] )
        self.assertEqual( f.contentItems(), [ ('sub1', f.sub1) ] )
        self.assertEqual( f.contentValues(), [f.sub1] )
        self.assertEqual( f.listFolderContents(), [f.sub1] )
        self.assertEqual( f.listDAVObjects(), [f.sub1] )

        f._setObject('hidden_sub2', DummyContent('hidden_sub2') )
        self.assertEqual( f.objectValues(), [f.sub1, f.hidden_sub2] )
        self.assertEqual( f.contentIds(), ['sub1', 'hidden_sub2'] )
        self.assertEqual( f.contentItems(), [ ('sub1', f.sub1),
                                            ('hidden_sub2', f.hidden_sub2) ] )
        self.assertEqual( f.contentValues(), [f.sub1, f.hidden_sub2] )
        self.assertEqual( f.listFolderContents(), [f.sub1] )
        self.assertEqual( f.listDAVObjects(), [f.sub1, f.hidden_sub2] )
    def test_mergedLocalRolesManipulation(self):
        # The _mergedLocalRoles function used to return references to
        # actual local role settings and it was possible to manipulate them
        # by changing the return value. http://www.zope.org/Collectors/CMF/376
        from Products.CMFCore.tests.base.dummy import DummyContent
        from Products.CMFCore.utils import _mergedLocalRoles
        obj = DummyContent()
        obj.manage_addLocalRoles('dummyuser1', ['Manager', 'Owner'])
        self.assertEqual(len(obj.get_local_roles_for_userid('dummyuser1')), 2)

        merged_roles = _mergedLocalRoles(obj)
        merged_roles['dummyuser1'].append('FOO')

        # The values on the object itself should still the the same
        self.assertEqual(len(obj.get_local_roles_for_userid('dummyuser1')), 2)
示例#30
0
    def test_checkTransitionGuard(self):
        wtool = self.wtool
        wf = self._getDummyWorkflow()
        dummy = self.site._setObject( 'dummy', DummyContent() )
        wtool.notifyCreated(dummy)
        self.assertEqual( wf._getStatusOf(dummy),
                          {'state': 'private', 'comments': ''} )

        # Check
        self.assert_(wf._checkTransitionGuard(wf.transitions['publish'],
                                              dummy))

        # Check with kwargs propagation
        self.assert_(wf._checkTransitionGuard(wf.transitions['publish'],
                                              dummy, arg1=1, arg2=2))