private static Qualityprofiles.SearchGroupsResponse.Group toGroup(GroupDto group, boolean isSelected) { Qualityprofiles.SearchGroupsResponse.Group.Builder builder = Qualityprofiles.SearchGroupsResponse.Group.newBuilder() .setName(group.getName()) .setSelected(isSelected); ofNullable(group.getDescription()).ifPresent(builder::setDescription); return builder.build(); }
private static Group toWsGroup(GroupDto group, Integer memberCount, Set<String> fields, boolean isDefault) { Group.Builder groupBuilder = Group.newBuilder() .setId(group.getId()) .setDefault(isDefault); if (fields.contains(FIELD_NAME)) { groupBuilder.setName(group.getName()); } if (fields.contains(FIELD_DESCRIPTION)) { ofNullable(group.getDescription()).ifPresent(groupBuilder::setDescription); } if (fields.contains(FIELD_MEMBERS_COUNT)) { groupBuilder.setMembersCount(memberCount); } return groupBuilder.build(); }
static UserGroups.Group.Builder toProtobuf(OrganizationDto organization, GroupDto group, int membersCount, boolean isDefault) { UserGroups.Group.Builder wsGroup = UserGroups.Group.newBuilder() .setId(group.getId()) .setOrganization(organization.getKey()) .setName(group.getName()) .setMembersCount(membersCount) .setDefault(isDefault); ofNullable(group.getDescription()).ifPresent(wsGroup::setDescription); return wsGroup; }
private static WsGroupsResponse buildResponse(List<GroupDto> groups, List<GroupPermissionDto> groupPermissions, Paging paging) { Multimap<Integer, String> permissionsByGroupId = TreeMultimap.create(); groupPermissions.forEach(groupPermission -> permissionsByGroupId.put(groupPermission.getGroupId(), groupPermission.getRole())); WsGroupsResponse.Builder response = WsGroupsResponse.newBuilder(); groups.forEach(group -> { Group.Builder wsGroup = response.addGroupsBuilder() .setName(group.getName()); if (group.getId() != 0) { wsGroup.setId(String.valueOf(group.getId())); } ofNullable(group.getDescription()).ifPresent(wsGroup::setDescription); wsGroup.addAllPermissions(permissionsByGroupId.get(group.getId())); }); response.getPagingBuilder() .setPageIndex(paging.pageIndex()) .setPageSize(paging.pageSize()) .setTotal(paging.total()); return response.build(); }
private static Permissions.WsGroupsResponse buildResponse(List<GroupDto> groups, List<PermissionTemplateGroupDto> groupPermissions, Paging paging) { Multimap<Integer, String> permissionsByGroupId = TreeMultimap.create(); groupPermissions.forEach(groupPermission -> permissionsByGroupId.put(groupPermission.getGroupId(), groupPermission.getPermission())); Permissions.WsGroupsResponse.Builder response = Permissions.WsGroupsResponse.newBuilder(); groups.forEach(group -> { Permissions.Group.Builder wsGroup = response.addGroupsBuilder() .setName(group.getName()); if (group.getId() != 0) { wsGroup.setId(String.valueOf(group.getId())); } ofNullable(group.getDescription()).ifPresent(wsGroup::setDescription); wsGroup.addAllPermissions(permissionsByGroupId.get(group.getId())); }); response.getPagingBuilder() .setPageIndex(paging.pageIndex()) .setPageSize(paging.pageSize()) .setTotal(paging.total()); return response.build(); }
@Test public void selectByName() { db.getDbClient().groupDao().insert(dbSession, aGroup); GroupDto group = underTest.selectByName(dbSession, AN_ORGANIZATION.getUuid(), aGroup.getName()).get(); assertThat(group.getId()).isNotNull(); assertThat(group.getOrganizationUuid()).isEqualTo(aGroup.getOrganizationUuid()); assertThat(group.getName()).isEqualTo(aGroup.getName()); assertThat(group.getDescription()).isEqualTo(aGroup.getDescription()); assertThat(group.getCreatedAt()).isEqualTo(new Date(NOW)); assertThat(group.getUpdatedAt()).isEqualTo(new Date(NOW)); }
@Test public void return_selected_groups_selected_param_is_set_to_all() { UserDto user = insertUser(); GroupDto usersGroup = insertDefaultGroup("sonar-users", "Sonar Users"); GroupDto adminGroup = insertGroup("sonar-admins", "Sonar Admins"); addUserToGroup(user, usersGroup); GroupsWsResponse response = call(ws.newRequest().setParam("login", USER_LOGIN).setParam(Param.SELECTED, ALL.value())); 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), tuple(adminGroup.getId().longValue(), adminGroup.getName(), adminGroup.getDescription(), false)); }
private void verifyGroupOwners(UserDto user, String organizationKey, String organizationName) { OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, organizationKey).get(); Optional<GroupDto> groupOpt = dbClient.groupDao().selectByName(dbSession, organization.getUuid(), "Owners"); assertThat(groupOpt).isPresent(); GroupDto groupDto = groupOpt.get(); assertThat(groupDto.getDescription()).isEqualTo("Owners of organization " + organizationName); assertThat(dbClient.groupPermissionDao().selectGlobalPermissionsOfGroup(dbSession, groupDto.getOrganizationUuid(), groupDto.getId())) .containsOnly(GlobalPermissions.ALL.toArray(new String[GlobalPermissions.ALL.size()])); List<UserMembershipDto> members = dbClient.groupMembershipDao().selectMembers( dbSession, UserMembershipQuery.builder() .organizationUuid(organization.getUuid()) .groupId(groupDto.getId()) .membership(UserMembershipQuery.IN).build(), 0, Integer.MAX_VALUE); assertThat(members) .extracting(UserMembershipDto::getLogin) .containsOnly(user.getLogin()); }
private void verifyMembersGroup(UserDto user, String organizationKey) { OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, organizationKey).get(); Optional<GroupDto> groupOpt = dbClient.groupDao().selectByName(dbSession, organization.getUuid(), "Members"); assertThat(groupOpt).isPresent(); GroupDto groupDto = groupOpt.get(); assertThat(groupDto.getDescription()).isEqualTo("All members of the organization"); assertThat(dbClient.groupPermissionDao().selectGlobalPermissionsOfGroup(dbSession, groupDto.getOrganizationUuid(), groupDto.getId())).isEmpty(); List<UserMembershipDto> members = dbClient.groupMembershipDao().selectMembers( dbSession, UserMembershipQuery.builder() .organizationUuid(organization.getUuid()) .groupId(groupDto.getId()) .membership(UserMembershipQuery.IN).build(), 0, Integer.MAX_VALUE); assertThat(members) .extracting(UserMembershipDto::getLogin) .containsOnly(user.getLogin()); }
@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 return_selected_groups_selected_param_is_set_to_selected() { 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).setParam(Param.SELECTED, SELECTED.value())); 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 return_not_selected_groups_selected_param_is_set_to_deselected() { UserDto user = insertUser(); GroupDto usersGroup = insertDefaultGroup("sonar-users", "Sonar Users"); GroupDto adminGroup = insertGroup("sonar-admins", "Sonar Admins"); addUserToGroup(user, usersGroup); GroupsWsResponse response = call(ws.newRequest().setParam("login", USER_LOGIN).setParam(Param.SELECTED, DESELECTED.value())); assertThat(response.getGroupsList()) .extracting(GroupsWsResponse.Group::getId, GroupsWsResponse.Group::getName, GroupsWsResponse.Group::getDescription, GroupsWsResponse.Group::getSelected) .containsOnly(tuple(adminGroup.getId().longValue(), adminGroup.getName(), adminGroup.getDescription(), false)); }
@Test public void request_creates_owners_group_with_all_permissions_for_new_organization_and_add_current_user_to_it() { UserDto user = db.users().insertUser(); userSession.logIn(user).setSystemAdministrator(); db.qualityGates().insertBuiltInQualityGate(); executeRequest("orgFoo"); DbSession dbSession = db.getSession(); OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, "orgfoo").get(); Optional<GroupDto> groupDtoOptional = dbClient.groupDao().selectByName(dbSession, organization.getUuid(), "Owners"); assertThat(groupDtoOptional).isNotEmpty(); GroupDto groupDto = groupDtoOptional.get(); assertThat(groupDto.getDescription()).isEqualTo("Owners of organization orgFoo"); assertThat(dbClient.groupPermissionDao().selectGlobalPermissionsOfGroup(dbSession, groupDto.getOrganizationUuid(), groupDto.getId())) .containsOnly(GlobalPermissions.ALL.toArray(new String[GlobalPermissions.ALL.size()])); List<UserMembershipDto> members = dbClient.groupMembershipDao().selectMembers( dbSession, UserMembershipQuery.builder() .organizationUuid(organization.getUuid()) .groupId(groupDto.getId()) .membership(UserMembershipQuery.IN).build(), 0, Integer.MAX_VALUE); assertThat(members) .extracting(UserMembershipDto::getLogin) .containsOnly(user.getLogin()); }
@Test public void request_creates_members_group_and_add_current_user_to_it() { UserDto user = db.users().insertUser(); userSession.logIn(user).setSystemAdministrator(); db.qualityGates().insertBuiltInQualityGate(); executeRequest("orgFoo"); DbSession dbSession = db.getSession(); OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, "orgfoo").get(); Optional<GroupDto> groupDtoOptional = dbClient.groupDao().selectByName(dbSession, organization.getUuid(), "Members"); assertThat(groupDtoOptional).isNotEmpty(); GroupDto groupDto = groupDtoOptional.get(); assertThat(groupDto.getDescription()).isEqualTo("All members of the organization"); assertThat(dbClient.groupPermissionDao().selectGlobalPermissionsOfGroup(dbSession, groupDto.getOrganizationUuid(), groupDto.getId())).isEmpty(); List<UserMembershipDto> members = dbClient.groupMembershipDao().selectMembers( dbSession, UserMembershipQuery.builder() .organizationUuid(organization.getUuid()) .groupId(groupDto.getId()) .membership(UserMembershipQuery.IN).build(), 0, Integer.MAX_VALUE); assertThat(members) .extracting(UserMembershipDto::getLogin) .containsOnly(user.getLogin()); }
@Test public void return_default_field() { insertDefaultGroupOnDefaultOrganization(); GroupDto group = db.users().insertGroup(); loginAsAdminOnDefaultOrganization(); String result = newRequest() .setParam("id", group.getId().toString()) .setParam("name", "new-name") .execute().getInput(); assertJson(result).isSimilarTo("{" + " \"group\": {" + " \"name\": \"new-name\"," + " \"description\": \"" + group.getDescription() + "\"," + " \"membersCount\": 0," + " \"default\": false" + " }" + "}"); }
@Test public void update_only_name() { insertDefaultGroupOnDefaultOrganization(); GroupDto group = db.users().insertGroup(); loginAsAdminOnDefaultOrganization(); String result = newRequest() .setParam("id", group.getId().toString()) .setParam("name", "new-name") .execute().getInput(); assertJson(result).isSimilarTo("{" + " \"group\": {" + " \"name\": \"new-name\"," + " \"description\": \"" + group.getDescription() + "\"," + " \"membersCount\": 0" + " }" + "}"); }
@Test public void search_all_groups() { OrganizationDto organization = db.organizations().insert(); QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); GroupDto group1 = db.users().insertGroup(organization); GroupDto group2 = db.users().insertGroup(organization); db.qualityProfiles().addGroupPermission(profile, group1); userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); SearchGroupsResponse response = ws.newRequest() .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") .executeProtobuf(SearchGroupsResponse.class); assertThat(response.getGroupsList()).extracting(SearchGroupsResponse.Group::getName, SearchGroupsResponse.Group::getDescription, SearchGroupsResponse.Group::getSelected) .containsExactlyInAnyOrder( tuple(group1.getName(), group1.getDescription(), true), tuple(group2.getName(), group2.getDescription(), false)); }
@Test public void return_groups_from_given_organization() { UserDto user = insertUser(); OrganizationDto organizationDto = db.organizations().insert(); OrganizationDto otherOrganizationDto = db.organizations().insert(); GroupDto group = db.users().insertDefaultGroup(newGroupDto().setName("group1").setOrganizationUuid(organizationDto.getUuid())); GroupDto otherGroup = db.users().insertDefaultGroup(newGroupDto().setName("group2").setOrganizationUuid(otherOrganizationDto.getUuid())); addUserToGroup(user, group); addUserToGroup(user, otherGroup); GroupsWsResponse response = call(ws.newRequest() .setParam("login", USER_LOGIN) .setParam("organization", organizationDto.getKey()) .setParam(Param.SELECTED, ALL.value())); assertThat(response.getGroupsList()) .extracting(GroupsWsResponse.Group::getId, GroupsWsResponse.Group::getName, GroupsWsResponse.Group::getDescription, GroupsWsResponse.Group::getSelected, GroupsWsResponse.Group::getDefault) .containsOnly(tuple(group.getId().longValue(), group.getName(), group.getDescription(), true, true)); }
@Test public void search_deselected_groups() { OrganizationDto organization = db.organizations().insert(); QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); GroupDto group1 = db.users().insertGroup(organization); GroupDto group2 = db.users().insertGroup(organization); db.qualityProfiles().addGroupPermission(profile, group1); userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); SearchGroupsResponse response = ws.newRequest() .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "deselected") .executeProtobuf(SearchGroupsResponse.class); assertThat(response.getGroupsList()).extracting(SearchGroupsResponse.Group::getName, SearchGroupsResponse.Group::getDescription, SearchGroupsResponse.Group::getSelected) .containsExactlyInAnyOrder( tuple(group2.getName(), group2.getDescription(), false)); }
@Test public void search_selected_groups() { OrganizationDto organization = db.organizations().insert(); QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); GroupDto group1 = db.users().insertGroup(organization); GroupDto group2 = db.users().insertGroup(organization); db.qualityProfiles().addGroupPermission(profile, group1); userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); SearchGroupsResponse response = ws.newRequest() .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "selected") .executeProtobuf(SearchGroupsResponse.class); assertThat(response.getGroupsList()).extracting(SearchGroupsResponse.Group::getName, SearchGroupsResponse.Group::getDescription, SearchGroupsResponse.Group::getSelected) .containsExactlyInAnyOrder( tuple(group1.getName(), group1.getDescription(), true)); }