def test_move_rename(self): """Test move or rename""" adapter = CreateContentFixtures(self, self.layer) suffixes = WORKSPACE_GROUPS.keys() proj_id1 = 'proj_handler_test_move_rename' self.assertNotIn(proj_id1, self.portal.contentIds()) allgroups_before = self.groups_plugin.listGroupIds() proj = adapter.add_project(proj_id1, title='Project 1') proj_uid = IUUID(proj) transaction.get().commit() # necessary for rename to work below self.assertIn(proj_id1, self.portal.contentIds()) allgroups_after = self.groups_plugin.listGroupIds() self.assertEquals(len(allgroups_after) - len(allgroups_before), 3) for g in ['%s-%s' % (proj_uid, suffix) for suffix in suffixes]: assert g in allgroups_after proj.setTitle('Project 1a') self.portal.manage_renameObject(proj_id1, proj_id1 + 'a') self.assertNotIn(proj_id1, self.portal.contentIds()) # old name self.assertIn(proj_id1 + 'a', self.portal.contentIds()) # new name allgroups_postrename = self.groups_plugin.listGroupIds() self.assertEquals(len(allgroups_postrename), len(allgroups_after)) for suffix in suffixes: groupname = '%s-%s' % (proj_uid, suffix) assert groupname in allgroups_postrename # new names title_suffix = WORKSPACE_GROUPS.get(suffix).get('title') title = self.groups_plugin.getGroupInfo(groupname).get('title') expected = 'Project 1a - %s' % title_suffix self.assertEquals(title, expected) ## now create a team workspace inside the project, similarly: team_id1 = 'team1' allgroups_before = self.groups_plugin.listGroupIds() team = adapter.add_workspace_to(proj, team_id1) team_uid = IUUID(team) roster = WorkspaceRoster(team) roster.add(TEST_USER_NAME) assert TEST_USER_NAME in roster assert len(roster) == 1 transaction.get().commit() # necessary for rename to work below allgroups_after = self.groups_plugin.listGroupIds() ## necessary/sufficient: all expected groups (and only these): self.assertEquals(len(allgroups_after) - len(allgroups_before), 3) for g in ['-'.join((team_uid, s)) for s in suffixes]: assert g in allgroups_after ## now rename the team newid = team_id1 + 'a' proj.manage_renameObject(team_id1, newid) team = proj.get(newid) assert IUUID(team) == team_uid # UUID does not change # ensure that users are copied to groups on rename: roster = WorkspaceRoster(team) assert TEST_USER_NAME in roster assert len(roster) == 1 allgroups_postrename = self.groups_plugin.listGroupIds() self.assertEquals(len(allgroups_postrename), len(allgroups_after)) for g in ['-'.join((team_uid, s)) for s in suffixes]: assert g in allgroups_postrename # new names
def create_workspace_groups_roles(context): site = getSite() members = ISiteMembers(site) pasgroups = members.groups roster = WorkspaceRoster(context) for group in roster.groups.values(): groupname, title = group.pas_group() if groupname not in pasgroups: pasgroups.add(groupname, title=title) else: # update title of previously existing group (edge case) pasgroups.get(groupname).title = _u(title) # bind local roles, mapping group to roles from config sync_group_roles(context, groupname) if INavigationRoot.providedBy(context): # for newly added top-level (nav root workspaces or # projects), add owner/creator as a manager. authuser = members.current() if authuser is not None: authuser = authuser.getUserName() if authuser in members: roster.add(authuser) roster.groups['managers'].add(authuser)