private void assertTemplate1AppliedToProject() { assertThat(selectProjectPermissionGroups(project, UserRole.ADMIN)).containsExactly(group1.getName()); assertThat(selectProjectPermissionGroups(project, UserRole.USER)).containsExactly(group2.getName()); assertThat(selectProjectPermissionUsers(project, UserRole.ADMIN)).isEmpty(); assertThat(selectProjectPermissionUsers(project, UserRole.CODEVIEWER)).containsExactly(user1.getId()); assertThat(selectProjectPermissionUsers(project, UserRole.ISSUE_ADMIN)).containsExactly(user2.getId()); }
private static SearchWsResponse buildResponse(List<GroupDto> groups, Map<String, Integer> userCountByGroup, Set<String> fields, Paging paging, GroupDto defaultGroup) { SearchWsResponse.Builder responseBuilder = SearchWsResponse.newBuilder(); groups.forEach(group -> responseBuilder .addGroups(toWsGroup(group, userCountByGroup.get(group.getName()), fields, defaultGroup.getId().equals(group.getId())))); responseBuilder.getPagingBuilder() .setPageIndex(paging.pageIndex()) .setPageSize(paging.pageSize()) .setTotal(paging.total()) .build(); return responseBuilder.build(); }
@Test public void count_groups_by_logins() { db.users().insertMember(group1, user1); db.users().insertMember(group2, user1); db.users().insertMember(group3, user1); db.users().insertMember(group2, user2); assertThat(underTest.selectGroupsByLogins(db.getSession(), emptyList()).keys()).isEmpty(); Multimap<String, String> groupsByLogin = underTest.selectGroupsByLogins(db.getSession(), asList(user1.getLogin(), user2.getLogin(), user3.getLogin())); assertThat(groupsByLogin.get(user1.getLogin())).containsOnly(group1.getName(), group2.getName(), group3.getName()); assertThat(groupsByLogin.get(user2.getLogin())).containsOnly(group2.getName()); assertThat(groupsByLogin.get(user3.getLogin())).isEmpty(); }
@Test public void remove_group_from_template_by_name_case_insensitive() { newRequest() .setParam(PARAM_GROUP_NAME, group.getName()) .setParam(PARAM_PERMISSION, PERMISSION) .setParam(PARAM_TEMPLATE_NAME, template.getName().toUpperCase()) .execute(); assertThat(getGroupNamesInTemplateAndPermission(template, PERMISSION)).isEmpty(); }
@Test public void fail_if_template_key_does_not_exist() { expectedException.expect(NotFoundException.class); expectedException.expectMessage("Permission template with id 'unknown-key' is not found"); newRequest(group.getName(), "unknown-key", PERMISSION); }
private void executeRequest(GroupDto groupDto, String permission) { newRequest() .setParam(PARAM_GROUP_NAME, groupDto.getName()) .setParam(PARAM_PERMISSION, permission) .execute(); }
@Test public void add_with_group_id() { loginAsAdmin(db.getDefaultOrganization()); newRequest() .setParam(PARAM_TEMPLATE_ID, template.getUuid()) .setParam(PARAM_PERMISSION, CODEVIEWER) .setParam(PARAM_GROUP_ID, String.valueOf(group.getId())) .execute(); assertThat(getGroupNamesInTemplateAndPermission(template, CODEVIEWER)).containsExactly(group.getName()); }
@Test public void fail_if_template_uuid_and_name_missing() { loginAsAdmin(db.getDefaultOrganization()); expectedException.expect(BadRequestException.class); newRequest(group.getName(), null, CODEVIEWER); }
@Test public void fail_if_template_key_does_not_exist() { loginAsAdmin(db.getDefaultOrganization()); expectedException.expect(NotFoundException.class); expectedException.expectMessage("Permission template with id 'unknown-key' is not found"); newRequest(group.getName(), "unknown-key", CODEVIEWER); }
@Test public void fail_if_group_with_same_name_already_exists_in_the_organization() throws Exception { OrganizationDto org = db.organizations().insert(); GroupDto group = db.users().insertGroup(org, "the-group"); loginAsAdmin(org); expectedException.expect(ServerException.class); expectedException.expectMessage("Group '" + group.getName() + "' already exists"); newRequest() .setParam("organization", org.getKey()) .setParam("name", group.getName()) .execute(); }
@Test public void return_selected_groups_selected_param_is_not_set() { UserDto user = insertUser(); GroupDto usersGroup = insertDefaultGroup("sonar-users", "Sonar Users"); insertGroup("sonar-admins", "Sonar Admins"); addUserToGroup(user, usersGroup); GroupsWsResponse response = call(ws.newRequest().setParam("login", USER_LOGIN)); assertThat(response.getGroupsList()) .extracting(GroupsWsResponse.Group::getId, GroupsWsResponse.Group::getName, GroupsWsResponse.Group::getDescription, GroupsWsResponse.Group::getSelected) .containsOnly(tuple(usersGroup.getId().longValue(), usersGroup.getName(), usersGroup.getDescription(), true)); }
@Test public void search_by_text_query() { UserDto user = insertUser(); GroupDto usersGroup = insertDefaultGroup("sonar-users", "Sonar Users"); GroupDto adminGroup = insertGroup("sonar-admins", "Sonar Admins"); addUserToGroup(user, usersGroup); assertThat(call(ws.newRequest().setParam("login", USER_LOGIN).setParam("q", "admin").setParam(Param.SELECTED, ALL.value())).getGroupsList()) .extracting(GroupsWsResponse.Group::getName).containsOnly(adminGroup.getName()); assertThat(call(ws.newRequest().setParam("login", USER_LOGIN).setParam("q", "users").setParam(Param.SELECTED, ALL.value())).getGroupsList()) .extracting(GroupsWsResponse.Group::getName).containsOnly(usersGroup.getName()); }
@Test public void selectGroupNamesByQuery_with_search_query() { GroupDto group = db.users().insertGroup(db.getDefaultOrganization(), "group-anyone"); db.users().insertGroup(db.getDefaultOrganization(), "unknown"); db.users().insertPermissionOnGroup(group, SCAN); assertThat(underTest.selectGroupNamesByQuery(dbSession, newQuery().setSearchQuery("any").build())).containsOnlyOnce(ANYONE, group.getName()); }
@Test public void fail_when_permission_is_missing() { GroupDto group = db.users().insertGroup(db.getDefaultOrganization(), "sonar-administrators"); loginAsAdmin(db.getDefaultOrganization()); expectedException.expect(IllegalArgumentException.class); newRequest() .setParam(PARAM_GROUP_NAME, group.getName()) .execute(); }
@Test public void reference_group_by_its_name_in_organization() { OrganizationDto org = db.organizations().insert(); GroupDto group = db.users().insertGroup(org, "the-group"); loginAsAdmin(org); newRequest() .setParam(PARAM_ORGANIZATION, org.getKey()) .setParam(PARAM_GROUP_NAME, group.getName()) .setParam(PARAM_PERMISSION, PROVISIONING) .execute(); assertThat(db.users().selectGroupPermissions(group, null)).containsOnly(PROVISIONING); }
@Test public void adding_global_permission_fails_if_not_administrator_of_organization() { GroupDto group = db.users().insertGroup(db.getDefaultOrganization(), "sonar-administrators"); // user is administrator of another organization userSession.logIn().addPermission(ADMINISTER, "anotherOrg"); expectedException.expect(ForbiddenException.class); newRequest() .setParam(PARAM_GROUP_NAME, group.getName()) .setParam(PARAM_PERMISSION, PROVISIONING) .execute(); }
@Test public void removing_project_permission_fails_if_not_administrator_of_project() { ComponentDto project = db.components().insertPrivateProject(); userSession.logIn(); expectedException.expect(ForbiddenException.class); newRequest() .setParam(PARAM_GROUP_NAME, aGroup.getName()) .setParam(PARAM_PERMISSION, PROVISIONING) .setParam(PARAM_PROJECT_KEY, project.getDbKey()) .execute(); }
@Test public void cannot_delete_last_system_admin_group() { insertDefaultGroupOnDefaultOrganization(); GroupDto group = db.users().insertGroup(); db.users().insertPermissionOnGroup(group, SYSTEM_ADMIN); loginAsAdminOnDefaultOrganization(); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("The last system admin group cannot be deleted"); newRequest() .setParam(PARAM_GROUP_NAME, group.getName()) .execute(); }
private void failIfComponentIsNotAProjectOrView(ComponentDto file) { loginAsAdmin(db.getDefaultOrganization()); expectedException.expect(BadRequestException.class); expectedException.expectMessage("Component '" + file.getDbKey() + "' (id: " + file.uuid() + ") must be a project or a view."); newRequest() .setParam(PARAM_GROUP_NAME, aGroup.getName()) .setParam(PARAM_PROJECT_ID, file.uuid()) .setParam(PARAM_PERMISSION, SYSTEM_ADMIN) .execute(); }