############################################################################## # # Copyright (c) 2004 Zope Corporation and Contributors. All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE. # ############################################################################## """ GenericSetup rolemap export / import unit tests $Id: test_rolemap.py 68488 2006-06-04 17:22:57Z yuppie $ """ import unittest import Testing from OFS.Folder import Folder from common import BaseRegistryTests from common import DummyExportContext from common import DummyImportContext class RolemapConfiguratorTests( BaseRegistryTests ): def _getTargetClass( self ): from Products.GenericSetup.rolemap import RolemapConfigurator return RolemapConfigurator def test_listRoles_normal( self ): EXPECTED = [ 'Anonymous', 'Authenticated', 'Manager', 'Owner' ] self.root.site = Folder( id='site' ) site = self.root.site configurator = self._makeOne( site ) roles = list( configurator.listRoles() ) self.assertEqual( len( roles ), len( EXPECTED ) ) roles.sort() for found, expected in zip( roles, EXPECTED ): self.assertEqual( found, expected ) def test_listRoles_added( self ): EXPECTED = [ 'Anonymous', 'Authenticated', 'Manager', 'Owner', 'ZZZ' ] self.root.site = Folder( id='site' ) site = self.root.site existing_roles = list( getattr( site, '__ac_roles__', [] ) )[:] existing_roles.append( 'ZZZ' ) site.__ac_roles__ = existing_roles configurator = self._makeOne( site ) roles = list( configurator.listRoles() ) self.assertEqual( len( roles ), len( EXPECTED ) ) roles.sort() for found, expected in zip( roles, EXPECTED ): self.assertEqual( found, expected ) def test_listPermissions_nooverrides( self ): self.root.site = Folder( id='site' ) site = self.root.site configurator = self._makeOne( site ) self.assertEqual( len( configurator.listPermissions() ), 0 ) def test_listPermissions_nooverrides( self ): site = Folder( id='site' ).__of__( self.root ) configurator = self._makeOne( site ) self.assertEqual( len( configurator.listPermissions() ), 0 ) def test_listPermissions_acquire( self ): ACI = 'Access contents information' ROLES = [ 'Manager', 'Owner' ] site = Folder( id='site' ).__of__( self.root ) site.manage_permission( ACI, ROLES, acquire=1 ) configurator = self._makeOne( site ) self.assertEqual( len( configurator.listPermissions() ), 1 ) info = configurator.listPermissions()[ 0 ] self.assertEqual( info[ 'name' ], ACI ) self.assertEqual( info[ 'roles' ], ROLES ) self.failUnless( info[ 'acquire' ] ) def test_listPermissions_no_acquire( self ): ACI = 'Access contents information' ROLES = [ 'Manager', 'Owner' ] site = Folder( id='site' ).__of__( self.root ) site.manage_permission( ACI, ROLES ) configurator = self._makeOne( site ) self.assertEqual( len( configurator.listPermissions() ), 1 ) info = configurator.listPermissions()[ 0 ] self.assertEqual( info[ 'name' ], ACI ) self.assertEqual( info[ 'roles' ], ROLES ) self.failIf( info[ 'acquire' ] ) def test_generateXML_empty( self ): self.root.site = Folder( id='site' ) site = self.root.site configurator = self._makeOne( site ).__of__( site ) self._compareDOM( configurator.generateXML(), _EMPTY_EXPORT ) def test_generateXML_added_role( self ): self.root.site = Folder( id='site' ) site = self.root.site existing_roles = list( getattr( site, '__ac_roles__', [] ) )[:] existing_roles.append( 'ZZZ' ) site.__ac_roles__ = existing_roles configurator = self._makeOne( site ).__of__( site ) self._compareDOM( configurator.generateXML(), _ADDED_ROLE_EXPORT ) def test_generateEXML_acquired_perm( self ): ACI = 'Access contents information' ROLES = [ 'Manager', 'Owner' ] site = Folder( id='site' ).__of__( self.root ) site.manage_permission( ACI, ROLES, acquire=1 ) configurator = self._makeOne( site ).__of__( site ) self._compareDOM( configurator.generateXML(), _ACQUIRED_EXPORT ) def test_generateEXML_unacquired_perm( self ): ACI = 'Access contents information' ROLES = [ 'Manager', 'Owner', 'ZZZ' ] site = Folder( id='site' ).__of__( self.root ) existing_roles = list( getattr( site, '__ac_roles__', [] ) )[:] existing_roles.append( 'ZZZ' ) site.__ac_roles__ = existing_roles site.manage_permission( ACI, ROLES ) configurator = self._makeOne( site ).__of__( site ) self._compareDOM( configurator.generateXML(), _COMBINED_EXPORT ) def test_generateEXML_unacquired_perm_added_role( self ): ACI = 'Access contents information' ROLES = [ 'Manager', 'Owner' ] site = Folder( id='site' ).__of__( self.root ) site.manage_permission( ACI, ROLES ) configurator = self._makeOne( site ).__of__( site ) self._compareDOM( configurator.generateXML(), _UNACQUIRED_EXPORT ) def test_parseXML_empty( self ): self.root.site = Folder( id='site' ) site = self.root.site existing_roles = list( getattr( site, '__ac_roles__', [] ) )[:] configurator = self._makeOne( site ) rolemap_info = configurator.parseXML( _EMPTY_EXPORT ) self.assertEqual( len( rolemap_info[ 'roles' ] ), 4 ) self.assertEqual( len( rolemap_info[ 'permissions' ] ), 0 ) def test_parseXML_added_role( self ): self.root.site = Folder( id='site' ) site = self.root.site configurator = self._makeOne( site ) rolemap_info = configurator.parseXML( _ADDED_ROLE_EXPORT ) roles = rolemap_info[ 'roles' ] self.assertEqual( len( roles ), 5 ) self.failUnless( 'Anonymous' in roles ) self.failUnless( 'Authenticated' in roles ) self.failUnless( 'Manager' in roles ) self.failUnless( 'Owner' in roles ) self.failUnless( 'ZZZ' in roles ) def test_parseXML_acquired_permission( self ): ACI = 'Access contents information' self.root.site = Folder( id='site' ) site = self.root.site configurator = self._makeOne( site ) rolemap_info = configurator.parseXML( _ACQUIRED_EXPORT ) self.assertEqual( len( rolemap_info[ 'permissions' ] ), 1 ) permission = rolemap_info[ 'permissions' ][ 0 ] self.assertEqual( permission[ 'name' ], ACI ) self.failUnless( permission[ 'acquire' ] ) p_roles = permission[ 'roles' ] self.assertEqual( len( p_roles ), 2 ) self.failUnless( 'Manager' in p_roles ) self.failUnless( 'Owner' in p_roles ) def test_parseXML_unacquired_permission( self ): ACI = 'Access contents information' self.root.site = Folder( id='site' ) site = self.root.site configurator = self._makeOne( site ) rolemap_info = configurator.parseXML( _UNACQUIRED_EXPORT ) self.assertEqual( len( rolemap_info[ 'permissions' ] ), 1 ) permission = rolemap_info[ 'permissions' ][ 0 ] self.assertEqual( permission[ 'name' ], ACI ) self.failIf( permission[ 'acquire' ] ) p_roles = permission[ 'roles' ] self.assertEqual( len( p_roles ), 2 ) self.failUnless( 'Manager' in p_roles ) self.failUnless( 'Owner' in p_roles ) def test_parseXML_unacquired_permission_added_role( self ): ACI = 'Access contents information' self.root.site = Folder( id='site' ) site = self.root.site configurator = self._makeOne( site ) rolemap_info = configurator.parseXML( _COMBINED_EXPORT ) roles = rolemap_info[ 'roles' ] self.assertEqual( len( roles ), 5 ) self.failUnless( 'Anonymous' in roles ) self.failUnless( 'Authenticated' in roles ) self.failUnless( 'Manager' in roles ) self.failUnless( 'Owner' in roles ) self.failUnless( 'ZZZ' in roles ) self.assertEqual( len( rolemap_info[ 'permissions' ] ), 1 ) permission = rolemap_info[ 'permissions' ][ 0 ] self.assertEqual( permission[ 'name' ], ACI ) self.failIf( permission[ 'acquire' ] ) p_roles = permission[ 'roles' ] self.assertEqual( len( p_roles ), 3 ) self.failUnless( 'Manager' in p_roles ) self.failUnless( 'Owner' in p_roles ) self.failUnless( 'ZZZ' in p_roles ) _EMPTY_EXPORT = """\ """ _ADDED_ROLE_EXPORT = """\ """ _ACQUIRED_EXPORT = """\ """ _UNACQUIRED_EXPORT = """\ """ _COMBINED_EXPORT = """\ """ class Test_exportRolemap( BaseRegistryTests ): def test_unchanged( self ): self.root.site = Folder( 'site' ) site = self.root.site context = DummyExportContext( site ) from Products.GenericSetup.rolemap import exportRolemap exportRolemap( context ) self.assertEqual( len( context._wrote ), 1 ) filename, text, content_type = context._wrote[ 0 ] self.assertEqual( filename, 'rolemap.xml' ) self._compareDOM( text, _EMPTY_EXPORT ) self.assertEqual( content_type, 'text/xml' ) def test_added_role( self ): self.root.site = Folder( 'site' ) site = self.root.site existing_roles = list( getattr( site, '__ac_roles__', [] ) )[:] existing_roles.append( 'ZZZ' ) site.__ac_roles__ = existing_roles context = DummyExportContext( site ) from Products.GenericSetup.rolemap import exportRolemap exportRolemap( context ) self.assertEqual( len( context._wrote ), 1 ) filename, text, content_type = context._wrote[ 0 ] self.assertEqual( filename, 'rolemap.xml' ) self._compareDOM( text, _ADDED_ROLE_EXPORT ) self.assertEqual( content_type, 'text/xml' ) def test_acquired_perm( self ): ACI = 'Access contents information' ROLES = [ 'Manager', 'Owner' ] self.root.site = Folder( 'site' ) site = self.root.site site.manage_permission( ACI, ROLES, acquire=1 ) context = DummyExportContext( site ) from Products.GenericSetup.rolemap import exportRolemap exportRolemap( context ) self.assertEqual( len( context._wrote ), 1 ) filename, text, content_type = context._wrote[ 0 ] self.assertEqual( filename, 'rolemap.xml' ) self._compareDOM( text, _ACQUIRED_EXPORT ) self.assertEqual( content_type, 'text/xml' ) def test_unacquired_perm( self ): ACI = 'Access contents information' ROLES = [ 'Manager', 'Owner', 'ZZZ' ] self.root.site = Folder( 'site' ) site = self.root.site existing_roles = list( getattr( site, '__ac_roles__', [] ) )[:] existing_roles.append( 'ZZZ' ) site.__ac_roles__ = existing_roles site.manage_permission( ACI, ROLES ) context = DummyExportContext( site ) from Products.GenericSetup.rolemap import exportRolemap exportRolemap( context ) self.assertEqual( len( context._wrote ), 1 ) filename, text, content_type = context._wrote[ 0 ] self.assertEqual( filename, 'rolemap.xml' ) self._compareDOM( text, _COMBINED_EXPORT ) self.assertEqual( content_type, 'text/xml' ) def test_unacquired_perm_added_role( self ): ACI = 'Access contents information' ROLES = [ 'Manager', 'Owner' ] self.root.site = Folder( 'site' ) site = self.root.site site.manage_permission( ACI, ROLES ) context = DummyExportContext( site ) from Products.GenericSetup.rolemap import exportRolemap exportRolemap( context ) self.assertEqual( len( context._wrote ), 1 ) filename, text, content_type = context._wrote[ 0 ] self.assertEqual( filename, 'rolemap.xml' ) self._compareDOM( text, _UNACQUIRED_EXPORT ) self.assertEqual( content_type, 'text/xml' ) class Test_importRolemap( BaseRegistryTests ): def test_empty_default_purge( self ): self.root.site = Folder( id='site' ) site = self.root.site original_roles = list( getattr( site, '__ac_roles__', [] ) )[:] modified_roles = original_roles[:] modified_roles.append( 'ZZZ' ) site.__ac_roles__ = modified_roles context = DummyImportContext( site ) context._files[ 'rolemap.xml' ] = _EMPTY_EXPORT from Products.GenericSetup.rolemap import importRolemap importRolemap( context ) new_roles = list( getattr( site, '__ac_roles__', [] ) )[:] original_roles.sort() new_roles.sort() self.assertEqual( original_roles, new_roles ) def test_empty_explicit_purge( self ): self.root.site = Folder( id='site' ) site = self.root.site original_roles = list( getattr( site, '__ac_roles__', [] ) )[:] modified_roles = original_roles[:] modified_roles.append( 'ZZZ' ) site.__ac_roles__ = modified_roles context = DummyImportContext( site, True ) context._files[ 'rolemap.xml' ] = _EMPTY_EXPORT from Products.GenericSetup.rolemap import importRolemap importRolemap( context ) new_roles = list( getattr( site, '__ac_roles__', [] ) )[:] original_roles.sort() new_roles.sort() self.assertEqual( original_roles, new_roles ) def test_empty_skip_purge( self ): self.root.site = Folder( id='site' ) site = self.root.site original_roles = list( getattr( site, '__ac_roles__', [] ) )[:] modified_roles = original_roles[:] modified_roles.append( 'ZZZ' ) site.__ac_roles__ = modified_roles context = DummyImportContext( site, False ) context._files[ 'rolemap.xml' ] = _EMPTY_EXPORT from Products.GenericSetup.rolemap import importRolemap importRolemap( context ) new_roles = list( getattr( site, '__ac_roles__', [] ) )[:] modified_roles.sort() new_roles.sort() self.assertEqual( modified_roles, new_roles ) def test_acquired_permission_explicit_purge( self ): ACI = 'Access contents information' VIEW = 'View' self.root.site = Folder( id='site' ) site = self.root.site site.manage_permission( ACI, () ) site.manage_permission( VIEW, () ) existing_allowed = [ x[ 'name' ] for x in site.rolesOfPermission( ACI ) if x[ 'selected' ] ] self.assertEqual( existing_allowed, [] ) self.failIf( site.acquiredRolesAreUsedBy( ACI ) ) self.failIf( site.acquiredRolesAreUsedBy( VIEW ) ) context = DummyImportContext( site, True ) context._files[ 'rolemap.xml' ] = _ACQUIRED_EXPORT from Products.GenericSetup.rolemap import importRolemap importRolemap( context ) new_allowed = [ x[ 'name' ] for x in site.rolesOfPermission( ACI ) if x[ 'selected' ] ] self.assertEqual( new_allowed, [ 'Manager', 'Owner' ] ) # ACI is overwritten by XML, but VIEW was purged self.failUnless( site.acquiredRolesAreUsedBy( ACI ) ) self.failUnless( site.acquiredRolesAreUsedBy( VIEW ) ) def test_acquired_permission_no_purge( self ): ACI = 'Access contents information' VIEW = 'View' self.root.site = Folder( id='site' ) site = self.root.site site.manage_permission( ACI, () ) site.manage_permission( VIEW, () ) existing_allowed = [ x[ 'name' ] for x in site.rolesOfPermission( ACI ) if x[ 'selected' ] ] self.assertEqual( existing_allowed, [] ) self.failIf( site.acquiredRolesAreUsedBy( ACI ) ) context = DummyImportContext( site, False ) context._files[ 'rolemap.xml' ] = _ACQUIRED_EXPORT from Products.GenericSetup.rolemap import importRolemap importRolemap( context ) new_allowed = [ x[ 'name' ] for x in site.rolesOfPermission( ACI ) if x[ 'selected' ] ] self.assertEqual( new_allowed, [ 'Manager', 'Owner' ] ) # ACI is overwritten by XML, but VIEW is not self.failUnless( site.acquiredRolesAreUsedBy( ACI ) ) self.failIf( site.acquiredRolesAreUsedBy( VIEW ) ) def test_unacquired_permission_explicit_purge( self ): ACI = 'Access contents information' VIEW = 'View' self.root.site = Folder( id='site' ) site = self.root.site site.manage_permission( VIEW, () ) existing_allowed = [ x[ 'name' ] for x in site.rolesOfPermission( ACI ) if x[ 'selected' ] ] self.assertEqual( existing_allowed, [ 'Manager' ] ) self.failUnless( site.acquiredRolesAreUsedBy( ACI ) ) self.failIf( site.acquiredRolesAreUsedBy( VIEW ) ) context = DummyImportContext( site, True ) context._files[ 'rolemap.xml' ] = _UNACQUIRED_EXPORT from Products.GenericSetup.rolemap import importRolemap importRolemap( context ) new_allowed = [ x[ 'name' ] for x in site.rolesOfPermission( ACI ) if x[ 'selected' ] ] self.assertEqual( new_allowed, [ 'Manager', 'Owner' ] ) self.failIf( site.acquiredRolesAreUsedBy( ACI ) ) self.failUnless( site.acquiredRolesAreUsedBy( VIEW ) ) def test_unacquired_permission_skip_purge( self ): ACI = 'Access contents information' VIEW = 'View' self.root.site = Folder( id='site' ) site = self.root.site site.manage_permission( VIEW, () ) existing_allowed = [ x[ 'name' ] for x in site.rolesOfPermission( ACI ) if x[ 'selected' ] ] self.assertEqual( existing_allowed, [ 'Manager' ] ) self.failUnless( site.acquiredRolesAreUsedBy( ACI ) ) self.failIf( site.acquiredRolesAreUsedBy( VIEW ) ) context = DummyImportContext( site, False ) context._files[ 'rolemap.xml' ] = _UNACQUIRED_EXPORT from Products.GenericSetup.rolemap import importRolemap importRolemap( context ) new_allowed = [ x[ 'name' ] for x in site.rolesOfPermission( ACI ) if x[ 'selected' ] ] self.assertEqual( new_allowed, [ 'Manager', 'Owner' ] ) self.failIf( site.acquiredRolesAreUsedBy( ACI ) ) self.failIf( site.acquiredRolesAreUsedBy( VIEW ) ) def test_unacquired_permission_added_role_explicit_purge( self ): ACI = 'Access contents information' VIEW = 'View' self.root.site = Folder( id='site' ) site = self.root.site site.manage_permission( VIEW, () ) existing_allowed = [ x[ 'name' ] for x in site.rolesOfPermission( ACI ) if x[ 'selected' ] ] self.assertEqual( existing_allowed, [ 'Manager' ] ) self.failUnless( site.acquiredRolesAreUsedBy( ACI ) ) self.failIf( site.acquiredRolesAreUsedBy( VIEW ) ) self.failIf( site._has_user_defined_role( 'ZZZ' ) ) context = DummyImportContext( site, True ) context._files[ 'rolemap.xml' ] = _COMBINED_EXPORT from Products.GenericSetup.rolemap import importRolemap importRolemap( context ) self.failUnless( site._has_user_defined_role( 'ZZZ' ) ) new_allowed = [ x[ 'name' ] for x in site.rolesOfPermission( ACI ) if x[ 'selected' ] ] self.assertEqual( new_allowed, [ 'Manager', 'Owner', 'ZZZ' ] ) self.failIf( site.acquiredRolesAreUsedBy( ACI ) ) self.failUnless( site.acquiredRolesAreUsedBy( VIEW ) ) def test_unacquired_permission_added_role_skip_purge( self ): ACI = 'Access contents information' VIEW = 'View' self.root.site = Folder( id='site' ) site = self.root.site site.manage_permission( VIEW, () ) existing_allowed = [ x[ 'name' ] for x in site.rolesOfPermission( ACI ) if x[ 'selected' ] ] self.assertEqual( existing_allowed, [ 'Manager' ] ) self.failUnless( site.acquiredRolesAreUsedBy( ACI ) ) self.failIf( site.acquiredRolesAreUsedBy( VIEW ) ) self.failIf( site._has_user_defined_role( 'ZZZ' ) ) context = DummyImportContext( site, False ) context._files[ 'rolemap.xml' ] = _COMBINED_EXPORT from Products.GenericSetup.rolemap import importRolemap importRolemap( context ) self.failUnless( site._has_user_defined_role( 'ZZZ' ) ) new_allowed = [ x[ 'name' ] for x in site.rolesOfPermission( ACI ) if x[ 'selected' ] ] self.assertEqual( new_allowed, [ 'Manager', 'Owner', 'ZZZ' ] ) self.failIf( site.acquiredRolesAreUsedBy( ACI ) ) self.failIf( site.acquiredRolesAreUsedBy( VIEW ) ) def test_unacquired_permission_added_role_skip_purge_encode_ascii( self ): ACI = 'Access contents information' VIEW = 'View' self.root.site = Folder( id='site' ) site = self.root.site site.manage_permission( VIEW, () ) existing_allowed = [ x[ 'name' ] for x in site.rolesOfPermission( ACI ) if x[ 'selected' ] ] self.assertEqual( existing_allowed, [ 'Manager' ] ) self.failUnless( site.acquiredRolesAreUsedBy( ACI ) ) self.failIf( site.acquiredRolesAreUsedBy( VIEW ) ) self.failIf( site._has_user_defined_role( 'ZZZ' ) ) context = DummyImportContext( site, False, encoding='ascii' ) context._files[ 'rolemap.xml' ] = _COMBINED_EXPORT from Products.GenericSetup.rolemap import importRolemap importRolemap( context ) self.failUnless( site._has_user_defined_role( 'ZZZ' ) ) new_allowed = [ x[ 'name' ] for x in site.rolesOfPermission( ACI ) if x[ 'selected' ] ] self.assertEqual( new_allowed, [ 'Manager', 'Owner', 'ZZZ' ] ) self.failIf( site.acquiredRolesAreUsedBy( ACI ) ) self.failIf( site.acquiredRolesAreUsedBy( VIEW ) ) def test_suite(): return unittest.TestSuite(( unittest.makeSuite( RolemapConfiguratorTests ), unittest.makeSuite( Test_exportRolemap ), unittest.makeSuite( Test_importRolemap ), )) if __name__ == '__main__': unittest.main(defaultTest='test_suite')