@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 search_by_login_name_or_email() { db.users().insertMember(group1, user1); db.users().insertMember(group2, user1); db.users().insertMember(group3, user1); db.users().insertMember(group2, user2); // search is case insensitive only on name List<UserMembershipDto> result = underTest.selectMembers(db.getSession(), newQuery().groupId(group1.getId()).memberSearch("NaMe").build(), 0, 10); assertThat(result).hasSize(1); result = underTest.selectMembers(db.getSession(), newQuery().groupId(group1.getId()).memberSearch("login").build(), 0, 10); assertThat(result).hasSize(1); result = underTest.selectMembers(db.getSession(), newQuery().groupId(group1.getId()).memberSearch("email").build(), 0, 10); assertThat(result).hasSize(1); }
public UserMembershipQuery build() { requireNonNull(groupId, "Group ID cant be null."); requireNonNull(organizationUuid, "Organization UUID cannot be null"); initMembership(); initPageIndex(); initPageSize(); return new UserMembershipQuery(this); } }
@Override public void handle(Request request, Response response) throws Exception { int pageSize = request.mandatoryParamAsInt(Param.PAGE_SIZE); int page = request.mandatoryParamAsInt(Param.PAGE); String queryString = request.param(Param.TEXT_QUERY); String selected = request.mandatoryParam(Param.SELECTED); try (DbSession dbSession = dbClient.openSession(false)) { GroupId group = support.findGroup(dbSession, request); userSession.checkPermission(OrganizationPermission.ADMINISTER, group.getOrganizationUuid()); UserMembershipQuery query = UserMembershipQuery.builder() .groupId(group.getId()) .organizationUuid(group.getOrganizationUuid()) .memberSearch(queryString) .membership(getMembership(selected)) .pageIndex(page) .pageSize(pageSize) .build(); int total = dbClient.groupMembershipDao().countMembers(dbSession, query); Paging paging = forPageIndex(page).withPageSize(pageSize).andTotal(total); List<UserMembershipDto> users = dbClient.groupMembershipDao().selectMembers(dbSession, query, paging.offset(), paging.pageSize()); try (JsonWriter json = response.newJsonWriter()) { json.beginObject(); writeMembers(json, users); writePaging(json, paging); json.endObject(); } } }
public static Builder builder() { return new Builder(); }
private void writeResponse(DbSession dbSession, Request request, Response response, OrganizationDto organization, GroupDto group) { UserMembershipQuery query = UserMembershipQuery.builder() .groupId(group.getId()) .organizationUuid(organization.getUuid()) .membership(UserMembershipQuery.IN) .build(); int membersCount = dbClient.groupMembershipDao().countMembers(dbSession, query); UserGroups.UpdateWsResponse.Builder respBuilder = UserGroups.UpdateWsResponse.newBuilder(); // 'default' is always false as it's not possible to update a default group respBuilder.setGroup(toProtobuf(organization, group, membersCount, false)); writeProtobuf(respBuilder.build(), request, response); }
public UserMembershipQuery build() { checkNotNull(groupId, "Group ID cant be null."); initMembership(); initPageIndex(); initPageSize(); return new UserMembershipQuery(this); } }
@Override public void handle(Request request, Response response) throws Exception { int pageSize = request.mandatoryParamAsInt(Param.PAGE_SIZE); int page = request.mandatoryParamAsInt(Param.PAGE); String queryString = request.param(Param.TEXT_QUERY); String selected = request.mandatoryParam(Param.SELECTED); try (DbSession dbSession = dbClient.openSession(false)) { GroupId group = support.findGroup(dbSession, request); userSession.checkPermission(OrganizationPermission.ADMINISTER, group.getOrganizationUuid()); UserMembershipQuery query = UserMembershipQuery.builder() .groupId(group.getId()) .organizationUuid(group.getOrganizationUuid()) .memberSearch(queryString) .membership(getMembership(selected)) .pageIndex(page) .pageSize(pageSize) .build(); int total = dbClient.groupMembershipDao().countMembers(dbSession, query); Paging paging = forPageIndex(page).withPageSize(pageSize).andTotal(total); List<UserMembershipDto> users = dbClient.groupMembershipDao().selectMembers(dbSession, query, paging.offset(), paging.pageSize()); try (JsonWriter json = response.newJsonWriter()) { json.beginObject(); writeMembers(json, users); writePaging(json, paging); json.endObject(); } } }
@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 count_members() { GroupDto emptyGroup = db.users().insertGroup(organizationDto, "sonar-nobody"); db.users().insertMember(group1, user1); db.users().insertMember(group2, user1); db.users().insertMember(group3, user1); db.users().insertMember(group2, user2); // 100 has 1 member and 1 non member assertThat(underTest.countMembers(db.getSession(), newQuery().groupId(group1.getId()).membership(UserMembershipQuery.IN).build())).isEqualTo(1); assertThat(underTest.countMembers(db.getSession(), newQuery().groupId(group1.getId()).membership(UserMembershipQuery.OUT).build())).isEqualTo(1); // 101 has 2 members assertThat(underTest.countMembers(db.getSession(), newQuery().groupId(group2.getId()).membership(UserMembershipQuery.IN).build())).isEqualTo(2); assertThat(underTest.countMembers(db.getSession(), newQuery().groupId(group2.getId()).membership(UserMembershipQuery.OUT).build())).isZero(); // 102 has 1 member and 1 non member assertThat(underTest.countMembers(db.getSession(), newQuery().groupId(group3.getId()).membership(UserMembershipQuery.IN).build())).isEqualTo(1); assertThat(underTest.countMembers(db.getSession(), newQuery().groupId(group3.getId()).membership(UserMembershipQuery.OUT).build())).isEqualTo(1); // 103 has no member assertThat(underTest.countMembers(db.getSession(), newQuery().groupId(emptyGroup.getId()).membership(UserMembershipQuery.IN).build())).isZero(); assertThat(underTest.countMembers(db.getSession(), newQuery().groupId(emptyGroup.getId()).membership(UserMembershipQuery.OUT).build())).isEqualTo(2); }
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 select_group_members_by_query() { GroupDto emptyGroup = db.users().insertGroup(organizationDto, "sonar-nobody"); db.users().insertMember(group1, user1); db.users().insertMember(group2, user1); db.users().insertMember(group3, user1); db.users().insertMember(group2, user2); // 100 has 1 member assertThat(underTest.selectMembers(db.getSession(), newQuery().groupId(group1.getId()).membership(UserMembershipQuery.IN).build(), 0, 10)).hasSize(1); // 101 has 2 members assertThat(underTest.selectMembers(db.getSession(), newQuery().groupId(group2.getId()).membership(UserMembershipQuery.IN).build(), 0, 10)).hasSize(2); // 102 has 1 member assertThat(underTest.selectMembers(db.getSession(), newQuery().groupId(group3.getId()).membership(UserMembershipQuery.IN).build(), 0, 10)).hasSize(1); // 103 has no member assertThat(underTest.selectMembers(db.getSession(), newQuery().groupId(emptyGroup.getId()).membership(UserMembershipQuery.IN).build(), 0, 10)).isEmpty(); }
@Test public void members_should_be_paginated() { db.users().insertMember(group1, user1); db.users().insertMember(group2, user1); db.users().insertMember(group3, user1); db.users().insertMember(group2, user2); List<UserMembershipDto> result = underTest.selectMembers(db.getSession(), newQuery().groupId(group1.getId()).build(), 0, 2); assertThat(result).hasSize(2); assertThat(result.get(0).getName()).isEqualTo("Admin name"); assertThat(result.get(1).getName()).isEqualTo("Not Admin"); result = underTest.selectMembers(db.getSession(), newQuery().groupId(100).build(), 1, 2); assertThat(result).hasSize(1); assertThat(result.get(0).getName()).isEqualTo("Not Admin"); result = underTest.selectMembers(db.getSession(), newQuery().groupId(100).build(), 2, 1); assertThat(result).isEmpty(); }
@Test public void select_users_not_affected_to_a_group_by_query() { GroupDto emptyGroup = db.users().insertGroup(organizationDto, "sonar-nobody"); db.users().insertMember(group1, user1); db.users().insertMember(group2, user1); db.users().insertMember(group3, user1); db.users().insertMember(group2, user2); // 100 has 1 member assertThat(underTest.selectMembers(db.getSession(), newQuery().groupId(group1.getId()).membership(UserMembershipQuery.OUT).build(), 0, 10)).hasSize(1); // 101 has 2 members assertThat(underTest.selectMembers(db.getSession(), newQuery().groupId(group2.getId()).membership(UserMembershipQuery.OUT).build(), 0, 10)).isEmpty(); // 102 has 1 member assertThat(underTest.selectMembers(db.getSession(), newQuery().groupId(group3.getId()).membership(UserMembershipQuery.OUT).build(), 0, 10)).hasSize(1); // 103 has no member assertThat(underTest.selectMembers(db.getSession(), newQuery().groupId(emptyGroup.getId()).membership(UserMembershipQuery.OUT).build(), 0, 10)).hasSize(2); }
public static Builder builder() { return new Builder(); }
private UserMembershipQuery.Builder newQuery() { return UserMembershipQuery.builder().organizationUuid(organizationDto.getUuid()); } }
@Test public void search_by_user_name_or_login() { db.users().insertMember(group1, user1); db.users().insertMember(group2, user1); db.users().insertMember(group3, user1); db.users().insertMember(group2, user2); List<UserMembershipDto> result = underTest.selectMembers(db.getSession(), newQuery().groupId(group1.getId()).memberSearch("admin").build(), 0, 10); assertThat(result).hasSize(2); assertThat(result.get(0).getName()).isEqualTo("Admin name"); assertThat(result.get(1).getName()).isEqualTo("Not Admin"); result = underTest.selectMembers(db.getSession(), newQuery().groupId(group1.getId()).memberSearch("not").build(), 0, 10); assertThat(result).hasSize(1); }
@Test public void should_be_sorted_by_user_name() { db.users().insertMember(group1, user1); db.users().insertMember(group2, user1); db.users().insertMember(group3, user1); db.users().insertMember(group2, user2); List<UserMembershipDto> result = underTest.selectMembers(db.getSession(), newQuery().groupId(group1.getId()).build(), 0, 10); assertThat(result).hasSize(2); assertThat(result.get(0).getName()).isEqualTo("Admin name"); assertThat(result.get(1).getName()).isEqualTo("Not Admin"); }
private void writeResponse(DbSession dbSession, Request request, Response response, OrganizationDto organization, GroupDto group) { UserMembershipQuery query = UserMembershipQuery.builder() .groupId(group.getId()) .organizationUuid(organization.getUuid()) .membership(UserMembershipQuery.IN) .build(); int membersCount = dbClient.groupMembershipDao().countMembers(dbSession, query); UserGroups.UpdateWsResponse.Builder respBuilder = UserGroups.UpdateWsResponse.newBuilder(); // 'default' is always false as it's not possible to update a default group respBuilder.setGroup(toProtobuf(organization, group, membersCount, false)); writeProtobuf(respBuilder.build(), request, response); }