@Test public void search_with_pagination() { UserDto user = insertUser(); insertDefaultGroup("sonar-users", "Sonar Users"); for (int i = 1; i <= 9; i++) { GroupDto groupDto = insertGroup("group-" + i, "group-" + i); addUserToGroup(user, groupDto); } GroupsWsResponse response = call(ws.newRequest().setParam("login", USER_LOGIN) .setParam(Param.PAGE_SIZE, "3") .setParam(Param.PAGE, "2") .setParam(Param.SELECTED, ALL.value())); assertThat(response.getGroupsList()).extracting(GroupsWsResponse.Group::getName).containsOnly("group-4", "group-5", "group-6"); assertThat(response.getPaging().getPageSize()).isEqualTo(3); assertThat(response.getPaging().getPageIndex()).isEqualTo(2); assertThat(response.getPaging().getTotal()).isEqualTo(10); }
@Test public void return_default_group_information() { 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::getDefault) .containsOnly( tuple(usersGroup.getId().longValue(), usersGroup.getName(), true), tuple(adminGroup.getId().longValue(), adminGroup.getName(), false)); }
@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)); }
@Test public void search_non_members() { OrganizationDto organization = db.organizations().insert(); UserDto currentUser = db.users().insertUser(); userSession.logIn(currentUser).addMembership(organization); UserDto anotherUser = db.users().insertUser(); db.organizations().addMember(organization, currentUser, anotherUser); OrganizationDto anotherOrganization = db.organizations().insert(); UserDto userInNoOrganization = db.users().insertUser(); UserDto userInAnotherOrganization = db.users().insertUser(); db.organizations().addMember(anotherOrganization, userInAnotherOrganization); indexAllUsers(); SearchMembersWsResponse result = ws.newRequest() .setParam("organization", organization.getKey()) .setParam("selected", DESELECTED.value()) .executeProtobuf(SearchMembersWsResponse.class); assertThat(result.getUsersList()) .extracting(User::getLogin, User::getName) .containsOnly( tuple(userInNoOrganization.getLogin(), userInNoOrganization.getName()), tuple(userInAnotherOrganization.getLogin(), userInAnotherOrganization.getName())); }
@Test public void return_only_authorized_projects() { OrganizationDto organization = db.organizations().insert(); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); ComponentDto project1 = db.components().insertPrivateProject(organization); ComponentDto project2 = db.components().insertPrivateProject(organization); UserDto user = db.users().insertUser(); // User can only see project1 1 db.users().insertProjectPermissionOnUser(user, USER, project1); userSession.logIn(user); SearchResponse response = ws.newRequest() .setParam(PARAM_GATE_ID, valueOf(qualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_SELECTED, ALL.value()) .executeProtobuf(SearchResponse.class); assertThat(response.getResultsList()) .extracting(Result::getName) .containsExactlyInAnyOrder(project1.name()) .doesNotContain(project2.name()); }
@Test public void deselected_users() { GroupDto group = db.users().insertGroup(); UserDto lovelace = db.users().insertUser(newUserDto().setLogin("ada").setName("Ada Lovelace")); db.organizations().addMember(db.getDefaultOrganization(), lovelace); UserDto hopper = db.users().insertUser(newUserDto().setLogin("grace").setName("Grace Hopper")); db.organizations().addMember(db.getDefaultOrganization(), hopper); db.users().insertMember(group, lovelace); loginAsAdminOnDefaultOrganization(); String result = newUsersRequest() .setParam("id", group.getId().toString()) .setParam(Param.SELECTED, SelectionMode.DESELECTED.value()) .execute() .getInput(); assertJson(result).isSimilarTo("{\n" + " \"users\": [\n" + " {\"login\": \"grace\", \"name\": \"Grace Hopper\", \"selected\": false}\n" + " ]\n" + "}"); }
@Test public void references_group_in_default_organization_by_its_name() { GroupDto group = db.users().insertGroup(); UserDto lovelace = db.users().insertUser(newUserDto().setLogin("ada.login").setName("Ada Lovelace")); db.organizations().addMember(db.getDefaultOrganization(), lovelace); UserDto hopper = db.users().insertUser(newUserDto().setLogin("grace").setName("Grace Hopper")); db.organizations().addMember(db.getDefaultOrganization(), hopper); db.users().insertMember(group, lovelace); loginAsAdminOnDefaultOrganization(); String result = newUsersRequest() .setParam("name", group.getName()) .setParam(Param.SELECTED, SelectionMode.ALL.value()) .execute() .getInput(); assertJson(result).isSimilarTo("{\n" + " \"users\": [\n" + " {\"login\": \"ada.login\", \"name\": \"Ada Lovelace\", \"selected\": true},\n" + " {\"login\": \"grace\", \"name\": \"Grace Hopper\", \"selected\": false}\n" + " ]\n" + "}\n"); }
@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 return_only_projects_from_organization() { OrganizationDto organization = db.organizations().insert(); OrganizationDto otherOrganization = db.organizations().insert(); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); QualityGateDto otherQualityGate = db.qualityGates().insertQualityGate(otherOrganization); ComponentDto project = db.components().insertPublicProject(organization); ComponentDto otherProject = db.components().insertPublicProject(otherOrganization); db.qualityGates().associateProjectToQualityGate(project, qualityGate); db.qualityGates().associateProjectToQualityGate(otherProject, otherQualityGate); SearchResponse response = ws.newRequest() .setParam(PARAM_GATE_ID, valueOf(qualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_SELECTED, ALL.value()) .executeProtobuf(SearchResponse.class); assertThat(response.getResultsList()) .extracting(Result::getName) .containsExactlyInAnyOrder(project.name()); }
@Test public void return_all_projects() { OrganizationDto organization = db.organizations().insert(); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); ComponentDto unassociatedProject = db.components().insertPublicProject(organization); ComponentDto associatedProject = db.components().insertPublicProject(organization); db.qualityGates().associateProjectToQualityGate(associatedProject, qualityGate); SearchResponse response = ws.newRequest() .setParam(PARAM_GATE_ID, valueOf(qualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_SELECTED, ALL.value()) .executeProtobuf(SearchResponse.class); assertThat(response.getResultsList()) .extracting(Result::getName, Result::getSelected) .containsExactlyInAnyOrder( tuple(associatedProject.name(), true), tuple(unassociatedProject.name(), false)); }
@Test public void return_only_associated_project() { OrganizationDto organization = db.organizations().insert(); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); ComponentDto associatedProject = db.components().insertPublicProject(organization); ComponentDto unassociatedProject = db.components().insertPublicProject(organization); db.qualityGates().associateProjectToQualityGate(associatedProject, qualityGate); SearchResponse response = ws.newRequest() .setParam(PARAM_GATE_ID, valueOf(qualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_SELECTED, SELECTED.value()) .executeProtobuf(SearchResponse.class); assertThat(response.getResultsList()) .extracting(Result::getName, Result::getSelected) .containsExactlyInAnyOrder(tuple(associatedProject.name(), true)) .doesNotContain(tuple(unassociatedProject.name(), false)); }
@Test public void return_only_unassociated_project() { OrganizationDto organization = db.organizations().insert(); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); ComponentDto associatedProject = db.components().insertPublicProject(organization); ComponentDto unassociatedProject = db.components().insertPublicProject(organization); db.qualityGates().associateProjectToQualityGate(associatedProject, qualityGate); SearchResponse response = ws.newRequest() .setParam(PARAM_GATE_ID, valueOf(qualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_SELECTED, DESELECTED.value()) .executeProtobuf(SearchResponse.class); assertThat(response.getResultsList()) .extracting(Result::getName, Result::getSelected) .containsExactlyInAnyOrder(tuple(unassociatedProject.name(), false)) .doesNotContain(tuple(associatedProject.name(), true)); }
@Test public void test_json_example() { UserDto user = insertUser(); GroupDto usersGroup = insertDefaultGroup("sonar-users", "Sonar Users"); insertGroup("sonar-admins", "Sonar Admins"); addUserToGroup(user, usersGroup); String response = ws.newRequest() .setMediaType(MediaTypes.JSON) .setParam("login", USER_LOGIN) .setParam(Param.SELECTED, ALL.value()) .setParam(Param.PAGE_SIZE, "25") .setParam(Param.PAGE, "1") .execute().getInput(); assertJson(response).ignoreFields("id").isSimilarTo(ws.getDef().responseExampleAsString()); }
@Test public void root_user() { OrganizationDto organization = db.organizations().insert(); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); ComponentDto project = db.components().insertPrivateProject(organization); userSession.logIn().setRoot(); SearchResponse response = ws.newRequest() .setParam(PARAM_GATE_ID, valueOf(qualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_SELECTED, ALL.value()) .executeProtobuf(SearchResponse.class); assertThat(response.getResultsList()) .extracting(Result::getName) .containsExactlyInAnyOrder(project.name()); }
@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 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 fail_if_project_permission_without_project() { loginAsAdmin(db.getDefaultOrganization()); expectedException.expect(BadRequestException.class); newRequest() .setParam(PARAM_PERMISSION, UserRole.ISSUE_ADMIN) .setParam(Param.SELECTED, SelectionMode.ALL.value()) .execute(); }
@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()); }
/** * Add 'selected=(selected|deselected|all)' for select-list oriented WS. */ public NewAction addSelectionModeParam() { createParam(Param.SELECTED) .setDescription("Depending on the value, show only selected items (selected=selected), deselected items (selected=deselected), " + "or all items with their selection status (selected=all).") .setDefaultValue(SelectionMode.SELECTED.value()) .setPossibleValues(SelectionMode.possibleValues()); return this; } }
@Test public void return_group_not_having_description() { UserDto user = insertUser(); GroupDto group = insertDefaultGroup("sonar-users", null); addUserToGroup(user, group); GroupsWsResponse response = call(ws.newRequest().setParam("login", "john").setParam(Param.SELECTED, ALL.value())); assertThat(response.getGroupsList()).extracting(GroupsWsResponse.Group::hasDescription).containsOnly(false); }