From: shh42 <svn...@pl...> - 2005-04-30 22:54:40
|
Author: shh42 Date: Sat Apr 30 18:47:02 2005 New Revision: 6774 Modified: CMFPlone/branches/2.1/HISTORY.txt CMFPlone/branches/2.1/PloneTool.py CMFPlone/branches/2.1/tests/testPloneTool.py Log: Made sure PloneTool.changeOwnershipOf() works recursively. Modified: CMFPlone/branches/2.1/HISTORY.txt ============================================================================== --- CMFPlone/branches/2.1/HISTORY.txt (original) +++ CMFPlone/branches/2.1/HISTORY.txt Sat Apr 30 18:47:02 2005 @@ -4,6 +4,9 @@ Plone 2.1 - Plaid - (unreleased) + - Made sure PloneTool.changeOwnershipOf() works recursively. + [stefan] + - Fixed user and group name/id fuzzyness in PloneTool.changeOwnershipOf() and folder_localrole_form.pt. [stefan] Modified: CMFPlone/branches/2.1/PloneTool.py ============================================================================== --- CMFPlone/branches/2.1/PloneTool.py (original) +++ CMFPlone/branches/2.1/PloneTool.py Sat Apr 30 18:47:02 2005 @@ -424,28 +424,31 @@ catalog_tool=getToolByName(self, 'portal_catalog') object.changeOwnership(user, recursive) - # get rid of all other owners - owners = object.users_with_local_role('Owner') - for o in owners: - roles = list(object.get_local_roles_for_userid(o)) - roles.remove('Owner') - if roles: - object.manage_setLocalRoles(o, roles) - else: - object.manage_delLocalRoles([o]) - - #FIX for 1750 - roles = list(object.get_local_roles_for_userid(user.getId())) - roles.append('Owner') - object.manage_setLocalRoles( user.getId(), roles ) + def fixOwnerRole(object, user_id): + # Get rid of all other owners + owners = object.users_with_local_role('Owner') + for o in owners: + roles = list(object.get_local_roles_for_userid(o)) + roles.remove('Owner') + if roles: + object.manage_setLocalRoles(o, roles) + else: + object.manage_delLocalRoles([o]) + # Fix for 1750 + roles = list(object.get_local_roles_for_userid(user_id)) + roles.append('Owner') + object.manage_setLocalRoles(user_id, roles) + fixOwnerRole(object, user.getId()) catalog_tool.reindexObject(object) + if recursive: purl = getToolByName(self, 'portal_url') _path = purl.getRelativeContentURL(object) subobjects=[b.getObject() for b in \ catalog_tool(path={'query':_path,'level':1})] for obj in subobjects: + fixOwnerRole(obj, user.getId()) catalog_tool.reindexObject(obj) security.declarePublic('urlparse') Modified: CMFPlone/branches/2.1/tests/testPloneTool.py ============================================================================== --- CMFPlone/branches/2.1/tests/testPloneTool.py (original) +++ CMFPlone/branches/2.1/tests/testPloneTool.py Sat Apr 30 18:47:02 2005 @@ -18,42 +18,6 @@ def afterSetUp(self): self.utils = self.portal.plone_utils - self.membership = self.portal.portal_membership - self.membership.addMember('new_owner', 'secret', ['Member'], []) - self.folder.invokeFactory('Folder', 'folder1') - self.folder1 = self.folder.folder1 - self.folder1.invokeFactory('Folder', 'folder2') - self.folder2 = self.folder1.folder2 - self.folder2.invokeFactory('Folder', 'folder3') - self.folder3 = self.folder2.folder3 - - def assertList(self, result, expect): - # Verifies lists have the same contents - lhs = [r for r in result] - lhs.sort() - rhs = list(expect) - rhs.sort() - self.assertEqual(lhs, rhs) - - def testChangeOwnershipOf(self): - self.folder.invokeFactory('Document', 'doc') - doc = self.folder.doc - self.assertEqual(doc.getOwnerTuple()[1], default_user) - self.assertEqual(doc.get_local_roles_for_userid(default_user), ('Owner',)) - - self.utils.changeOwnershipOf(doc, 'new_owner') - self.assertEqual(doc.getOwnerTuple()[1], 'new_owner') - self.assertEqual(doc.get_local_roles_for_userid('new_owner'), ('Owner',)) - - # Initial creator no longer has Owner role. - self.assertEqual(doc.get_local_roles_for_userid(default_user), ()) - - def testGetOwnerId(self): - #Test that getOwnerId gets the Owner Id - self.folder.invokeFactory('Document', 'doc2') - doc = self.folder.doc2 - self.utils.changeOwnershipOf(doc, 'new_owner') - self.assertEqual(self.utils.getOwnerId(doc), 'new_owner') def testvalidateSingleEmailAddress(self): # Any RFC 822 email address allowed, but address list must fail @@ -200,6 +164,68 @@ self.assertEqual(self.utils.titleToNormalizedId(input), 'eksempel-eoa-norsk-eoa') + +class TestOwnershipStuff(PloneTestCase.PloneTestCase): + + def afterSetUp(self): + self.utils = self.portal.plone_utils + self.membership = self.portal.portal_membership + self.membership.addMember('new_owner', 'secret', ['Member'], []) + self.folder.invokeFactory('Folder', 'folder1') + self.folder1 = self.folder.folder1 + self.folder1.invokeFactory('Folder', 'folder2') + self.folder2 = self.folder1.folder2 + self.folder2.invokeFactory('Folder', 'folder3') + self.folder3 = self.folder2.folder3 + + def assertList(self, result, expect): + # Verifies lists have the same contents + lhs = [r for r in result] + lhs.sort() + rhs = list(expect) + rhs.sort() + self.assertEqual(lhs, rhs) + + def testChangeOwnershipOf(self): + # Should take ownership + self.assertEqual(self.folder1.getOwnerTuple()[1], default_user) + self.assertList(self.folder1.get_local_roles_for_userid(default_user), ['Owner']) + + self.utils.changeOwnershipOf(self.folder1, 'new_owner') + self.assertEqual(self.folder1.getOwnerTuple()[1], 'new_owner') + self.assertList(self.folder1.get_local_roles_for_userid('new_owner'), ['Owner']) + + # Initial creator no longer has Owner role. + self.assertList(self.folder1.get_local_roles_for_userid(default_user), []) + + def testChangeOwnershipOfKeepsOtherRoles(self): + # Should preserve roles other than Owner + self.folder1.manage_addLocalRoles('new_owner', ('Reviewer',)) + self.assertList(self.folder1.get_local_roles_for_userid('new_owner'), ['Reviewer']) + self.utils.changeOwnershipOf(self.folder1, 'new_owner') + self.assertEqual(self.folder1.getOwnerTuple()[1], 'new_owner') + self.assertList(self.folder1.get_local_roles_for_userid('new_owner'), ['Owner', 'Reviewer']) + self.assertList(self.folder1.get_local_roles_for_userid(default_user), []) + + def testChangeOwnershipOfRecursive(self): + # Should take ownership of subobjects as well + self.utils.changeOwnershipOf(self.folder1, 'new_owner', recursive=1) + self.assertEqual(self.folder1.getOwnerTuple()[1], 'new_owner') + self.assertList(self.folder1.get_local_roles_for_userid('new_owner'), ['Owner']) + self.assertList(self.folder1.get_local_roles_for_userid(default_user), []) + self.assertEqual(self.folder2.getOwnerTuple()[1], 'new_owner') + self.assertList(self.folder2.get_local_roles_for_userid('new_owner'), ['Owner']) + self.assertList(self.folder2.get_local_roles_for_userid(default_user), []) + self.assertEqual(self.folder3.getOwnerTuple()[1], 'new_owner') + self.assertList(self.folder3.get_local_roles_for_userid('new_owner'), ['Owner']) + self.assertList(self.folder3.get_local_roles_for_userid(default_user), []) + + def testGetOwnerId(self): + # Test that getOwnerId gets the Owner Id + self.assertEqual(self.utils.getOwnerId(self.folder1), default_user) + self.utils.changeOwnershipOf(self.folder1, 'new_owner') + self.assertEqual(self.utils.getOwnerId(self.folder1), 'new_owner') + def testGetInheritedLocalRoles(self): # Test basic local roles acquisition is dealt with by # getInheritedLocalRoles @@ -216,7 +242,7 @@ # make sure local roles are picked up from all folders in tree. gILR = self.utils.getInheritedLocalRoles self.folder1.manage_addLocalRoles('new_owner', ('Reviewer',)) - self.folder2.manage_addLocalRoles('new_owner',('Owner',)) + self.folder2.manage_addLocalRoles('new_owner', ('Owner',)) # folder2 should have only the inherited role filtered_roles = [r for r in gILR(self.folder2) if r[0] == 'new_owner'][0] @@ -634,6 +660,7 @@ from unittest import TestSuite, makeSuite suite = TestSuite() suite.addTest(makeSuite(TestPloneTool)) + suite.addTest(makeSuite(TestOwnershipStuff)) suite.addTest(makeSuite(TestEditMetadata)) suite.addTest(makeSuite(TestEditMetadataIndependence)) suite.addTest(makeSuite(TestFormulatorFields)) |