Commit 4f5bf594 authored by Romain Courteaud's avatar Romain Courteaud

Check worklist generation.


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@16637 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 38676af4
##############################################################################
#
# Copyright (c) 2007 Nexedi SA and Contributors.
# All Rights Reserved.
# Romain Courteaud <romain@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
import unittest
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
from AccessControl.SecurityManagement import newSecurityManager
from Products.ERP5Type.tests.Sequence import SequenceList
from zExceptions import BadRequest
from Products.ERP5Type.Tool.ClassTool import _aq_reset
from Testing.ZopeTestCase.PortalTestCase import PortalTestCase
class TestWorklist(ERP5TypeTestCase):
run_all_test = 1
quiet = 1
login = PortalTestCase.login
checked_portal_type = 'Organisation'
checked_workflow = 'validation_workflow'
worklist_assignor_id = 'assignor_worklist'
actbox_assignor_name = 'assignor_todo'
worklist_owner_id = 'owner_worklist'
actbox_owner_name = 'owner_todo'
def getTitle(self):
return "Worklist"
def getBusinessTemplateList(self):
"""
Return list of bt5 to install
"""
return ('erp5_base',)
def getUserFolder(self):
"""
Return the user folder
"""
return getattr(self.getPortal(), 'acl_users', None)
def createManagerAndLogin(self):
"""
Create a simple user in user_folder with manager rights.
This user will be used to initialize data in the method afterSetup
"""
self.getUserFolder()._doAddUser('manager', '', ['Manager'], [])
self.login('manager')
def createERP5Users(self, user_dict):
"""
Create all ERP5 users needed for the test.
ERP5 user = Person object + Assignment object in erp5 person_module.
"""
portal = self.getPortal()
module = portal.getDefaultModule("Person")
# Create the Person.
for user_login, user_data in user_dict.items():
# Create the Person.
self.logMessage("Create user: %s" % user_login)
person = module.newContent(
portal_type='Person',
reference=user_login,
password='hackme',
)
# Create the Assignment.
assignment = person.newContent(
portal_type = 'Assignment',
group = "%s" % user_data[0],
function = "%s" % user_data[1],
start_date = '01/01/1900',
stop_date = '01/01/2900',
)
assignment.openAction()
# Reindexing is required for the security to work
get_transaction().commit()
self.tic()
def createUsers(self):
"""
Create all users needed for the test
"""
self.createERP5Users(self.getUserDict())
def getUserDict(self):
"""
Return dict of users needed for the test
"""
user_dict = {
'foo': [None, None],
'bar': [None, None],
}
return user_dict
def stepLoginAsFoo(self, sequence=None, sequence_list=None, **kw):
self.login("foo")
def stepLoginAsBar(self, sequence=None,
sequence_list=None, **kw):
self.login("bar")
def createDocument(self):
module = self.getPortal().getDefaultModule(self.checked_portal_type)
return module.newContent(portal_type=self.checked_portal_type)
def createWorklist(self):
workflow = self.getWorkflowTool()[self.checked_workflow]
worklists = workflow.worklists
for worklist_id, actbox_name, role in [
(self.worklist_assignor_id, self.actbox_assignor_name, 'Assignor'),
(self.worklist_owner_id, self.actbox_owner_name, 'Owner')]:
worklists.addWorklist(worklist_id)
worklist_definition = worklists._getOb(worklist_id)
worklist_definition.setProperties('', actbox_name=actbox_name,
props={'guard_roles': role,
'var_match_portal_type': self.checked_portal_type})
def test_01_worklist(self, quiet=0, run=run_all_test):
"""
Test the permission of the building module.
"""
if not run:
return
workflow_tool = self.portal.portal_workflow
self.logMessage("Create Manager")
self.createManagerAndLogin()
self.createUsers()
self.logMessage("Create worklist")
self.createWorklist()
self.logMessage("Create document as Manager")
document = self.createDocument()
get_transaction().commit()
self.tic()
self.portal.portal_caches.clearAllCache()
result = workflow_tool.listActions(object=document)
self.logout()
# Users can not see worklist as they are not Assignor
for user_id in ('manager', ):
self.login(user_id)
result = workflow_tool.listActions(object=document)
self.logMessage("Check %s worklist as Assignor" % user_id)
entry_list = [x for x in result if x['name'] == self.actbox_assignor_name]
self.assertEquals(len(entry_list), 0)
self.logMessage("Check %s worklist as Owner" % user_id)
entry_list = [x for x in result if x['name'] == self.actbox_owner_name]
self.assertEquals(len(entry_list), 1)
self.logout()
for user_id in ('foo', 'bar'):
self.logMessage("Check %s worklist" % user_id)
self.login(user_id)
result = workflow_tool.listActions(object=document)
self.assertEquals(result, [])
self.logout()
# Define foo as Assignor
self.login('manager')
self.logMessage("Give foo Assignor role")
document.manage_addLocalRoles('foo', ['Assignor'])
document.reindexObject()
get_transaction().commit()
self.tic()
self.portal.portal_caches.clearAllCache()
self.logout()
for user_id in ('manager', ):
self.login(user_id)
result = workflow_tool.listActions(object=document)
self.logMessage("Check %s worklist as Assignor" % user_id)
entry_list = [x for x in result if x['name'] == self.actbox_assignor_name]
self.assertEquals(len(entry_list), 0)
self.logMessage("Check %s worklist as Owner" % user_id)
entry_list = [x for x in result if x['name'] == self.actbox_owner_name]
self.assertEquals(len(entry_list), 1)
self.logout()
for user_id in ('bar', ):
self.login(user_id)
result = workflow_tool.listActions(object=document)
self.logMessage("Check %s worklist as Assignor" % user_id)
entry_list = [x for x in result if x['name'] == self.actbox_assignor_name]
self.assertEquals(len(entry_list), 0)
self.logMessage("Check %s worklist as Owner" % user_id)
entry_list = [x for x in result if x['name'] == self.actbox_owner_name]
self.assertEquals(len(entry_list), 0)
self.logout()
for user_id in ('foo', ):
self.login(user_id)
result = workflow_tool.listActions(object=document)
self.logMessage("Check %s worklist as Assignor" % user_id)
entry_list = [x for x in result if x['name'] == self.actbox_assignor_name]
self.assertEquals(len(entry_list), 1)
self.logMessage("Check %s worklist as Owner" % user_id)
entry_list = [x for x in result if x['name'] == self.actbox_owner_name]
self.assertEquals(len(entry_list), 0)
self.logout()
# Define foo and bar as Assignee
self.login('manager')
self.logMessage("Give foo Assignee role")
document.manage_addLocalRoles('foo', ['Assignee'])
self.logMessage("Give bar Assignee role")
document.manage_addLocalRoles('bar', ['Assignee'])
document.reindexObject()
get_transaction().commit()
self.tic()
self.portal.portal_caches.clearAllCache()
self.logout()
# Users can not see worklist as they are not Assignor
for user_id in ('manager', ):
self.login(user_id)
result = workflow_tool.listActions(object=document)
self.logMessage("Check %s worklist as Assignor" % user_id)
entry_list = [x for x in result if x['name'] == self.actbox_assignor_name]
self.assertEquals(len(entry_list), 0)
self.logMessage("Check %s worklist as Owner" % user_id)
entry_list = [x for x in result if x['name'] == self.actbox_owner_name]
self.assertEquals(len(entry_list), 1)
self.logout()
for user_id in ('bar', ):
self.login(user_id)
result = workflow_tool.listActions(object=document)
self.logMessage("Check %s worklist as Assignor" % user_id)
entry_list = [x for x in result if x['name'] == self.actbox_assignor_name]
self.assertEquals(len(entry_list), 0)
self.logMessage("Check %s worklist as Owner" % user_id)
entry_list = [x for x in result if x['name'] == self.actbox_owner_name]
self.assertEquals(len(entry_list), 0)
self.logout()
for user_id in ('foo', ):
self.login(user_id)
result = workflow_tool.listActions(object=document)
self.logMessage("Check %s worklist as Assignor" % user_id)
entry_list = [x for x in result if x['name'] == self.actbox_assignor_name]
self.assertEquals(len(entry_list), 1)
self.logMessage("Check %s worklist as Owner" % user_id)
entry_list = [x for x in result if x['name'] == self.actbox_owner_name]
self.assertEquals(len(entry_list), 0)
self.logout()
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestWorklist))
return suite
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment