[Erp5-report] r10619 - /erp5/trunk/products/ERP5Security/tests/testERP5Security.py

nobody at svn.erp5.org nobody at svn.erp5.org
Sun Oct 8 21:50:02 CEST 2006


Author: jerome
Date: Sun Oct  8 21:49:55 2006
New Revision: 10619

URL: http://svn.erp5.org?rev=10619&view=rev
Log:
add a few tests for Role Management in ERP5 Security


Modified:
    erp5/trunk/products/ERP5Security/tests/testERP5Security.py

Modified: erp5/trunk/products/ERP5Security/tests/testERP5Security.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Security/tests/testERP5Security.py?rev=10619&r1=10618&r2=10619&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Security/tests/testERP5Security.py (original)
+++ erp5/trunk/products/ERP5Security/tests/testERP5Security.py Sun Oct  8 21:49:55 2006
@@ -39,6 +39,7 @@
 from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase,\
                                                      get_request
 from AccessControl.SecurityManagement import newSecurityManager
+from AccessControl.SecurityManagement import getSecurityManager
 from zLOG import LOG
 from Products.ERP5Type.Cache import clearCache
 from Products.PluggableAuthService import PluggableAuthService
@@ -47,14 +48,15 @@
 except ImportError:
   from zope.interface.verify import verifyClass
 
-class TestERP5Security(ERP5TypeTestCase):
-  """Test ERP5 Security."""
+class TestUserManagement(ERP5TypeTestCase):
+  """Tests User Management in ERP5Security.
+  """
  
   RUN_ALL_TESTS = 1
   
   def getTitle(self):
     """Title of the test."""
-    return "ERP5 Security"
+    return "ERP5Security: User Management"
   
   def getBusinessTemplateList(self):
     """List of BT to install. """
@@ -196,13 +198,135 @@
     changed, = person_module.manage_pasteObjects(copy_data)
     self.assertNotEquals(person_module[changed['new_id']].getReference(),
                          person_module[changed['id']].getReference())
-
+  
+class TestLocalRoleManagement(ERP5TypeTestCase):
+  """Tests Local Role Management with ERP5Security.
+
+  This test should probably part of ERP5Type ?
+  """
+  def getTitle(self):
+    return "ERP5Security: User Role Management"
+
+  def afterSetUp(self):
+    """Called after setup completed.
+    """
+    self.portal = self.getPortal()
+    # configure group, site, function categories
+    for bc in ['group', 'site', 'function']:
+      base_cat = self.getCategoryTool()[bc]
+      code = bc[0].upper()
+      base_cat.newContent(portal_type='Category',
+                          id='subcat',
+                          codification="%s1" % code)
+    self.defined_category = "group/subcat\n"\
+                            "site/subcat\n"\
+                            "function/subcat"
+    # any member can add organisations
+    self.portal.organisation_module.manage_permission(
+            'Add portal content', roles=['Member', 'Manager'], acquire=1)
+
+    self.username = 'username'
+    # create a user and open an assignement
+    pers = self.getPersonModule().newContent(portal_type='Person',
+                                             career_role='internal',
+                                             reference=self.username,
+                                             password=self.username)
+    assignment = pers.newContent( portal_type='Assignment',
+                                  group='subcat',
+                                  site='subcat',
+                                  function='subcat' )
+    assignment.open()
+    get_transaction().commit()
+    self.tic()
+  
+  def beforeTearDown(self):
+    """Called before teardown."""
+    # clear base categories
+    for bc in ['group', 'site', 'function']:
+      base_cat = self.getCategoryTool()[bc]
+      base_cat.manage_delObjects([x for x in base_cat.objectIds()])
+    # clear role definitions
+    for ti in self.getTypesTool().objectValues(spec=('ERP5 Type Information',)):
+      ti._roles = ()
+    # clear modules
+    for module in self.portal.objectValues(spec=('ERP5 Folder',)):
+      module.manage_delObjects([x for x in module.objectIds()])
+    # commit this
+    get_transaction().commit()
+    clearCache()
+
+  def loginAsUser(self, username):
+    uf = self.portal.acl_users
+    user = uf.getUserById(username).__of__(uf)
+    newSecurityManager(None, user)
+  
+  def _getTypeInfo(self):
+    return self.getTypesTool()['Organisation']
+  
+  def _makeOne(self):
+    return self.getOrganisationModule().newContent(portal_type='Organisation')
+  
+  def getBusinessTemplateList(self):
+    """List of BT to install. """
+    return ('erp5_base',)
+  
+  def testMemberRole(self):
+    """Test users have the Member role.
+    """
+    self.loginAsUser(self.username)
+    self.failUnless('Member' in
+            getSecurityManager().getUser().getRolesInContext(self.portal))
+    self.failUnless('Member' in
+            getSecurityManager().getUser().getRoles())
+
+  def testSimpleLocalRole(self):
+    """Test simple case of setting a role.
+    """
+    ti = self._getTypeInfo()
+    ti.addRole(id='Assignor', description='desc.',
+           name='an Assignor role for testing',
+           condition='',
+           category=self.defined_category,
+           base_category_script='ERP5Type_getSecurityCategoryFromAssignment',
+           base_category='')
+    obj = self._makeOne()
+    self.assertEquals(['Assignor'], obj.__ac_local_roles__.get('F1_G1_S1'))
+    
+    self.loginAsUser(self.username)
+    self.failUnless('Assignor' in
+            getSecurityManager().getUser().getRolesInContext(obj))
+        
+  def testDynamicLocalRole(self):
+    """Test simple case of setting a dynamic role.
+    The site category is not defined explictly the role, and will have the
+    current site of the user.
+    """
+    return NotImplemented # FIXME: currently this test raises error
+                           
+    ti = self._getTypeInfo()
+    ti.addRole(id='Assignor', description='desc.',
+           name='an Assignor role for testing',
+           condition='',
+           category='group/subcat\nfunction/subcat',
+           base_category_script='ERP5Type_getSecurityCategoryFromAssignment',
+           base_category='site')
+    
+    self.loginAsUser(self.username)
+    obj = self._makeOne()
+    self.assertEquals(['Assignor'], obj.__ac_local_roles__.get('F1_G1_S1'))
+    self.failUnless('Assignor' in
+            getSecurityManager().getUser().getRolesInContext(obj))
+  
+  def testAcquireLocalRoles(self):
+    return NotImplemented # TODO
+    
 if __name__ == '__main__':
   framework()
 else:
   import unittest
   def test_suite():
     suite = unittest.TestSuite()
-    suite.addTest(unittest.makeSuite(TestERP5Security))
+    suite.addTest(unittest.makeSuite(TestUserManagement))
+    suite.addTest(unittest.makeSuite(TestLocalRoleManagement))
     return suite
 




More information about the Erp5-report mailing list