[CMF-checkins] CVS: CMF/CMFSetup/tests - simple.png:1.1
	test_actions.py:1.1 common.py:1.5 test_all.py:1.6
	test_context.py:1.6 test.png:NONE
    Tres Seaver 
    tseaver at zope.com
       
    Mon May 24 18:44:23 EDT 2004
    
    
  
Update of /cvs-repository/CMF/CMFSetup/tests
In directory cvs.zope.org:/tmp/cvs-serv24152/tests
Modified Files:
	common.py test_all.py test_context.py 
Added Files:
	simple.png test_actions.py 
Removed Files:
	test.png 
Log Message:
  - rolemap:
    o Tweak import order.
    o Coding style for attribute names.
    o Docstring fixes.
  - tests/*.png:
    o Rename for better command-line expansion karma.
  - actions.py:
    o Export / import actions tool's providers and their actions.
=== Added File CMF/CMFSetup/tests/simple.png ===
  <Binary-ish file>
=== Added File CMF/CMFSetup/tests/test_actions.py ===
""" CMFSetup action provider export / import unit tests
$Id: test_actions.py,v 1.1 2004/05/24 22:43:51 tseaver Exp $
"""
import unittest
from OFS.Folder import Folder
from Products.CMFCore.ActionProviderBase import ActionProviderBase
from common import BaseRegistryTests
from common import DummyExportContext
from common import DummyImportContext
class DummyTool( Folder, ActionProviderBase ):
    pass
class DummyActionsTool( DummyTool ):
    def __init__( self ):
        self._providers = []
    def addActionProvider( self, provider_name ):
        self._providers.append( provider_name )
    def listActionProviders( self ):
        return self._providers[:]
    def deleteActionProvider( self, provider_name ):
        self._providers = [ x for x in self._providers if x != provider_name ]
class _ActionSetup:
    def _initSite( self, foo=2, bar=2 ):
        self.root.site = Folder( id='site' )
        site = self.root.site
        site.portal_actions = DummyActionsTool()
        site.portal_actions.addActionProvider( 'portal_actions' )
        if foo > 0:
            site.portal_foo = DummyTool()
        if foo > 1:
            site.portal_foo.addAction( id='foo'
                                    , name='Foo'
                                    , action='foo'
                                    , condition='python:1'
                                    , permission=()
                                    , category='dummy'
                                    , visible=1
                                    )
            site.portal_actions.addActionProvider( 'portal_foo' )
        if bar > 0:
            site.portal_bar = DummyTool()
        if bar > 1:
            site.portal_bar.addAction( id='bar'
                                    , name='Bar'
                                    , action='bar'
                                    , condition='python:0'
                                    , permission=( 'Manage portal', )
                                    , category='dummy'
                                    , visible=0
                                    )
            site.portal_actions.addActionProvider( 'portal_bar' )
        return site
class ActionProvidersConfiguratorTests( BaseRegistryTests
                                      , _ActionSetup
                                      ):
    def _getTargetClass( self ):
        from Products.CMFSetup.actions import ActionProvidersConfigurator
        return ActionProvidersConfigurator
    def test_listProviderInfo_normal( self ):
        site = self._initSite()
        EXPECTED = [ { 'id' : 'portal_actions'
                     , 'actions' : []
                     }
                   , { 'id' : 'portal_foo'
                     , 'actions' : [ { 'id' : 'foo'
                                     , 'name' : 'Foo'
                                     , 'action' : 'string:${object_url}/foo'
                                     , 'condition' : 'python:1'
                                     , 'permission' : ''
                                     , 'category' : 'dummy'
                                     , 'visible' : 1
                                     }
                                   ]
                     }
                   , { 'id' : 'portal_bar'
                     , 'actions' : [ { 'id' : 'bar'
                                     , 'name' : 'Bar'
                                     , 'action' : 'string:${object_url}/bar'
                                     , 'condition' : 'python:0'
                                     , 'permission' : 'Manage portal'
                                     , 'category' : 'dummy'
                                     , 'visible' : 0
                                     }
                                   ]
                     }
                   ]
        configurator = self._makeOne( site )
        info_list = configurator.listProviderInfo()
        self.assertEqual( len( info_list ), len( EXPECTED ) )
        for found, expected in zip( info_list, EXPECTED ):
            self.assertEqual( found, expected )
    def test_generateXML_empty( self ):
        site = self._initSite( 0, 0 )
        configurator = self._makeOne( site ).__of__( site )
        self._compareDOM( configurator.generateXML(), _EMPTY_EXPORT )
    def test_generateXML_normal( self ):
        site = self._initSite()
        configurator = self._makeOne( site ).__of__( site )
        self._compareDOM( configurator.generateXML(), _NORMAL_EXPORT )
    def test_parseXML_empty( self ):
        site = self._initSite( 0, 0 )
        configurator = self._makeOne( site )
        before_list = configurator.listProviderInfo()
        configurator.parseXML( _EMPTY_EXPORT )
        after_list = configurator.listProviderInfo()
        self.assertEqual( before_list, after_list )
    def test_parseXML_normal( self ):
        site = self._initSite( 1, 1 )
        self.assertEqual( len( site.portal_foo.listActions() ), 0 )
        self.assertEqual( len( site.portal_bar.listActions() ), 0 )
        configurator = self._makeOne( site )
        configurator.parseXML( _NORMAL_EXPORT )
        self.assertEqual( len( site.portal_foo.listActions() ), 1 )
        action = site.portal_foo.listActions()[ 0 ]
        self.assertEqual( action.getId(), 'foo' )
        self.assertEqual( action.Title(), 'Foo' )
        self.assertEqual( action.getActionExpression()
                        , 'string:${object_url}/foo' )
        self.assertEqual( action.getCondition(), 'python:1' )
        self.assertEqual( action.getPermissions(), () )
        self.assertEqual( action.getCategory(), 'dummy' )
        self.failUnless( action.getVisibility() )
        self.assertEqual( len( site.portal_bar.listActions() ), 1 )
        action = site.portal_bar.listActions()[ 0 ]
        self.assertEqual( action.getId(), 'bar' )
        self.assertEqual( action.Title(), 'Bar' )
        self.assertEqual( action.getActionExpression()
                        , 'string:${object_url}/bar' )
        self.assertEqual( action.getCondition(), 'python:0' )
        self.assertEqual( action.getPermissions(), ( 'Manage portal', ) )
        self.assertEqual( action.getCategory(), 'dummy' )
        self.failIf( action.getVisibility() )
_EMPTY_EXPORT = """\
<?xml version="1.0"?>
<actions-tool>
 <action-provider id="portal_actions">
 </action-provider>
</actions-tool>
"""
_NORMAL_EXPORT = """\
<?xml version="1.0"?>
<actions-tool>
 <action-provider id="portal_actions">
 </action-provider>
 <action-provider id="portal_foo">
  <action action_id="foo"
          title="Foo"
          action_expr="string:${object_url}/foo"
          condition_expr="python:1"
          permission=""
          category="dummy"
          visible="1" />
 </action-provider>
 <action-provider id="portal_bar">
  <action action_id="bar"
          title="Bar"
          action_expr="string:${object_url}/bar"
          condition_expr="python:0"
          permission="Manage portal"
          category="dummy"
          visible="0" />
 </action-provider>
</actions-tool>
"""
class Test_exportActionProviders( BaseRegistryTests
                                , _ActionSetup
                                ):
    def test_unchanged( self ):
        site = self._initSite( 0, 0 )
        context = DummyExportContext( site )
        from Products.CMFSetup.actions import exportActionProviders
        exportActionProviders( context )
        self.assertEqual( len( context._wrote ), 1 )
        filename, text, content_type = context._wrote[ 0 ]
        self.assertEqual( filename, 'actions.xml' )
        self._compareDOM( text, _EMPTY_EXPORT )
        self.assertEqual( content_type, 'text/xml' )
    def test_normal( self ):
        site = self._initSite()
        context = DummyExportContext( site )
        from Products.CMFSetup.actions import exportActionProviders
        exportActionProviders( context )
        self.assertEqual( len( context._wrote ), 1 )
        filename, text, content_type = context._wrote[ 0 ]
        self.assertEqual( filename, 'actions.xml' )
        self._compareDOM( text, _NORMAL_EXPORT )
        self.assertEqual( content_type, 'text/xml' )
class Test_importActionProviders( BaseRegistryTests
                                , _ActionSetup
                                ):
    def test_empty_default_purge( self ):
        site = self._initSite( 2, 0 )
        atool = site.portal_actions
        self.assertEqual( len( atool.listActionProviders() ), 2 )
        self.failUnless( 'portal_foo' in atool.listActionProviders() )
        self.failUnless( 'portal_actions' in atool.listActionProviders() )
        context = DummyImportContext( site )
        context._files[ 'actions.xml' ] = _EMPTY_EXPORT
        from Products.CMFSetup.actions import importActionProviders
        importActionProviders( context )
        self.assertEqual( len( atool.listActionProviders() ), 1 )
    def test_empty_explicit_purge( self ):
        site = self._initSite( 2, 0 )
        atool = site.portal_actions
        self.assertEqual( len( atool.listActionProviders() ), 2 )
        self.failUnless( 'portal_foo' in atool.listActionProviders() )
        self.failUnless( 'portal_actions' in atool.listActionProviders() )
        context = DummyImportContext( site, True )
        context._files[ 'actions.xml' ] = _EMPTY_EXPORT
        from Products.CMFSetup.actions import importActionProviders
        importActionProviders( context )
        self.assertEqual( len( atool.listActionProviders() ), 1 )
        self.failIf( 'portal_foo' in atool.listActionProviders() )
        self.failUnless( 'portal_actions' in atool.listActionProviders() )
    def test_empty_skip_purge( self ):
        site = self._initSite( 2, 0 )
        atool = site.portal_actions
        self.assertEqual( len( atool.listActionProviders() ), 2 )
        self.failUnless( 'portal_foo' in atool.listActionProviders() )
        self.failUnless( 'portal_actions' in atool.listActionProviders() )
        context = DummyImportContext( site, False )
        context._files[ 'actions.xml' ] = _EMPTY_EXPORT
        from Products.CMFSetup.actions import importActionProviders
        importActionProviders( context )
        self.assertEqual( len( atool.listActionProviders() ), 2 )
        self.failUnless( 'portal_foo' in atool.listActionProviders() )
        self.failUnless( 'portal_actions' in atool.listActionProviders() )
    def test_normal( self ):
        site = self._initSite( 1, 1 )
        atool = site.portal_actions
        foo = site.portal_foo
        bar = site.portal_bar
        self.assertEqual( len( atool.listActionProviders() ), 1 )
        self.failIf( 'portal_foo' in atool.listActionProviders() )
        self.failIf( foo.listActions() )
        self.failIf( 'portal_bar' in atool.listActionProviders() )
        self.failIf( bar.listActions() )
        self.failUnless( 'portal_actions' in atool.listActionProviders() )
        context = DummyImportContext( site )
        context._files[ 'actions.xml' ] = _NORMAL_EXPORT
        from Products.CMFSetup.actions import importActionProviders
        importActionProviders( context )
        self.assertEqual( len( atool.listActionProviders() ), 3 )
        self.failUnless( 'portal_foo' in atool.listActionProviders() )
        self.failUnless( foo.listActions() )
        self.failUnless( 'portal_bar' in atool.listActionProviders() )
        self.failUnless( bar.listActions() )
        self.failUnless( 'portal_actions' in atool.listActionProviders() )
def test_suite():
    return unittest.TestSuite((
        unittest.makeSuite( ActionProvidersConfiguratorTests ),
        unittest.makeSuite( Test_exportActionProviders ),
        unittest.makeSuite( Test_importActionProviders ),
        ))
if __name__ == '__main__':
    unittest.main(defaultTest='test_suite')
=== CMF/CMFSetup/tests/common.py 1.4 => 1.5 ===
--- CMF/CMFSetup/tests/common.py:1.4	Sun May 23 23:12:10 2004
+++ CMF/CMFSetup/tests/common.py	Mon May 24 18:43:51 2004
@@ -14,6 +14,17 @@
         from xml.dom.minidom import parseString
         found = parseString( found_text )
         expected = parseString( expected_text )
+        fxml = found.toxml()
+        exml = expected.toxml()
+
+        if fxml != exml:
+            print 'Found:'
+            print fxml
+            print
+            print 'Expected:'
+            print exml
+            print
+
         self.assertEqual( found.toxml(), expected.toxml() )
 
 class BaseRegistryTests( SecurityRequestTest, DOMComparator ):
=== CMF/CMFSetup/tests/test_all.py 1.5 => 1.6 ===
--- CMF/CMFSetup/tests/test_all.py:1.5	Sun May 23 14:57:39 2004
+++ CMF/CMFSetup/tests/test_all.py	Mon May 24 18:43:51 2004
@@ -13,7 +13,8 @@
 
 def suite():
     return build_test_suite( 'Products.CMFSetup.tests'
-                           , [ 'test_context'
+                           , [ 'test_actions'
+                             , 'test_context'
                              , 'test_registry'
                              , 'test_rolemap'
                              , 'test_tool'
=== CMF/CMFSetup/tests/test_context.py 1.5 => 1.6 ===
--- CMF/CMFSetup/tests/test_context.py:1.5	Mon May 24 15:13:10 2004
+++ CMF/CMFSetup/tests/test_context.py	Mon May 24 18:43:51 2004
@@ -412,7 +412,8 @@
         from OFS.Image import Image
         _FILENAME = 'simple.txt'
         _CONTENT_TYPE = 'image/png'
-        png_filename = os.path.join( os.path.split( __file__ )[0], 'test.png' )
+        png_filename = os.path.join( os.path.split( __file__ )[0]
+                                   , 'simple.png' )
         png_file = open( png_filename, 'rb' )
         png_data = png_file.read()
         png_file.close()
=== Removed File CMF/CMFSetup/tests/test.png ===
    
    
More information about the CMF-checkins
mailing list