@Test public void empty_when_no_language_installed() { WsActionTester ws = new WsActionTester(new SearchAction(userSession, new Languages(), dbClient, qProfileWsSupport, new ComponentFinder(dbClient, null))); db.qualityProfiles().insert(db.getDefaultOrganization()); SearchWsResponse result = call(ws.newRequest()); assertThat(result.getProfilesList()).isEmpty(); }
boolean isGlobalQProfileAdmin = userSession.hasPermission(ADMINISTER_QUALITY_PROFILES, data.getOrganization()); SearchWsResponse.Builder response = SearchWsResponse.newBuilder(); response.setActions(SearchWsResponse.Actions.newBuilder().setCreate(isGlobalQProfileAdmin)); for (QProfileDto profile : profiles) {
private Map<String, QualityProfile> call(String url) throws IOException { GetRequest getRequest = new GetRequest(url); try (InputStream is = wsClient.call(getRequest).contentStream()) { SearchWsResponse profiles = SearchWsResponse.parseFrom(is); List<QualityProfile> profilesList = profiles.getProfilesList(); return profilesList.stream().collect(toMap(QualityProfile::getLanguage, identity(), throwingMerger(), LinkedHashMap::new)); } }
boolean isGlobalQProfileAdmin = userSession.hasPermission(ADMINISTER_QUALITY_PROFILES, data.getOrganization()); SearchWsResponse.Builder response = SearchWsResponse.newBuilder(); response.setActions(SearchWsResponse.Actions.newBuilder().setCreate(isGlobalQProfileAdmin)); for (QProfileDto profile : profiles) {
/** * * This is part of the internal API. * This is a GET request. * @see <a href="https://next.sonarqube.com/sonarqube/web_api/api/qualityprofiles/search">Further information about this action online (including a response example)</a> * @since 5.2 */ public SearchWsResponse search(SearchRequest request) { return call( new GetRequest(path("search")) .setParam("defaults", request.getDefaults()) .setParam("language", request.getLanguage()) .setParam("organization", request.getOrganization()) .setParam("project", request.getProject()) .setParam("qualityProfile", request.getQualityProfile()), SearchWsResponse.parser()); }
private Map<String, QualityProfile> call(String url) throws IOException { GetRequest getRequest = new GetRequest(url); try (InputStream is = wsClient.call(getRequest).contentStream()) { SearchWsResponse profiles = SearchWsResponse.parseFrom(is); List<QualityProfile> profilesList = profiles.getProfilesList(); return profilesList.stream().collect(toMap(QualityProfile::getLanguage, identity(), throwingMerger(), LinkedHashMap::new)); } }
@Test public void actions_when_user_can_edit_profile() { OrganizationDto organization = db.organizations().insert(); QProfileDto profile1 = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey())); QProfileDto profile2 = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO2.getKey())); QProfileDto profile3 = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO2.getKey())); QProfileDto builtInProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO2.getKey()).setIsBuiltIn(true)); UserDto user = db.users().insertUser(); GroupDto group = db.users().insertGroup(organization); db.qualityProfiles().addUserPermission(profile1, user); db.qualityProfiles().addGroupPermission(profile3, group); userSession.logIn(user).setGroups(group); SearchWsResponse result = call(ws.newRequest() .setParam(PARAM_ORGANIZATION, organization.getKey())); assertThat(result.getProfilesList()) .extracting(QualityProfile::getKey, qp -> qp.getActions().getEdit(), qp -> qp.getActions().getCopy(), qp -> qp.getActions().getSetAsDefault(), qp -> qp.getActions().getDelete(), qp -> qp.getActions().getAssociateProjects()) .containsExactlyInAnyOrder( tuple(profile1.getKee(), true, false, false, true, true), tuple(profile2.getKee(), false, false, false, false, false), tuple(profile3.getKee(), true, false, false, true, true), tuple(builtInProfile.getKee(), false, false, false, false, false)); assertThat(result.getActions().getCreate()).isFalse(); }
@Test public void actions_when_user_is_global_qprofile_administer() { OrganizationDto organization = db.organizations().insert(); QProfileDto customProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey())); QProfileDto builtInProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey()).setIsBuiltIn(true)); QProfileDto defaultProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey())); db.qualityProfiles().setAsDefault(defaultProfile); UserDto user = db.users().insertUser(); userSession.logIn(user).addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); SearchWsResponse result = call(ws.newRequest() .setParam(PARAM_ORGANIZATION, organization.getKey())); assertThat(result.getProfilesList()) .extracting(QualityProfile::getKey, qp -> qp.getActions().getEdit(), qp -> qp.getActions().getCopy(), qp -> qp.getActions().getSetAsDefault(), qp -> qp.getActions().getDelete(), qp -> qp.getActions().getAssociateProjects()) .containsExactlyInAnyOrder( tuple(customProfile.getKee(), true, true, true, true, true), tuple(builtInProfile.getKee(), false, true, true, false, true), tuple(defaultProfile.getKee(), true, true, false, false, false)); assertThat(result.getActions().getCreate()).isTrue(); }
@Test public void filter_on_project_key_and_default() { ComponentDto project = db.components().insertPrivateProject(); QProfileDto profileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); QProfileDto defaultProfileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); QProfileDto defaultProfileOnXoo2 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO2.getKey())); db.qualityProfiles().associateWithProject(project, profileOnXoo1); db.qualityProfiles().setAsDefault(defaultProfileOnXoo1, defaultProfileOnXoo2); SearchWsResponse result = call(ws.newRequest() .setParam(PARAM_PROJECT_KEY, project.getDbKey()) .setParam(PARAM_DEFAULTS, "true")); assertThat(result.getProfilesList()) .extracting(QualityProfile::getKey) .containsExactlyInAnyOrder(defaultProfileOnXoo2.getKee()) .doesNotContain(defaultProfileOnXoo1.getKee(), profileOnXoo1.getKee()); }
/** * * This is part of the internal API. * This is a GET request. * @see <a href="https://next.sonarqube.com/sonarqube/web_api/api/qualityprofiles/search">Further information about this action online (including a response example)</a> * @since 5.2 */ public SearchWsResponse search(SearchRequest request) { return call( new GetRequest(path("search")) .setParam("defaults", request.getDefaults()) .setParam("language", request.getLanguage()) .setParam("organization", request.getOrganization()) .setParam("project", request.getProject()) .setParam("qualityProfile", request.getQualityProfile()), SearchWsResponse.parser()); }
@Test public void map_dates() { long time = DateUtils.parseDateTime("2016-12-22T19:10:03+0100").getTime(); qualityProfileDb.insert(newQualityProfileDto() .setOrganizationUuid(defaultOrganizationProvider.get().getUuid()) .setLanguage(XOO1.getKey()) .setRulesUpdatedAt("2016-12-21T19:10:03+0100") .setLastUsed(time) .setUserUpdatedAt(time)); SearchWsResponse result = call(ws.newRequest()); assertThat(result.getProfilesCount()).isEqualTo(1); assertThat(result.getProfiles(0).getRulesUpdatedAt()).isEqualTo("2016-12-21T19:10:03+0100"); assertThat(parseDateTime(result.getProfiles(0).getLastUsed()).getTime()).isEqualTo(time); assertThat(parseDateTime(result.getProfiles(0).getUserUpdatedAt()).getTime()).isEqualTo(time); }
@Test public void filter_on_project_key() { ComponentDto project = db.components().insertPrivateProject(); QProfileDto profileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); QProfileDto defaultProfileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); QProfileDto defaultProfileOnXoo2 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO2.getKey())); db.qualityProfiles().associateWithProject(project, profileOnXoo1); db.qualityProfiles().setAsDefault(defaultProfileOnXoo1, defaultProfileOnXoo2); SearchWsResponse result = call(ws.newRequest().setParam(PARAM_PROJECT_KEY, project.getDbKey())); assertThat(result.getProfilesList()) .extracting(QualityProfile::getKey) .containsExactlyInAnyOrder(profileOnXoo1.getKee(), defaultProfileOnXoo2.getKee()) .doesNotContain(defaultProfileOnXoo1.getKee()); }
@Test public void statistics_on_active_rules() { QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); RuleDefinitionDto rule = db.rules().insertRule(r -> r.setLanguage(XOO1.getKey())).getDefinition(); RuleDefinitionDto deprecatedRule1 = db.rules().insertRule(r -> r.setStatus(DEPRECATED)).getDefinition(); RuleDefinitionDto deprecatedRule2 = db.rules().insertRule(r -> r.setStatus(DEPRECATED)).getDefinition(); RuleDefinitionDto inactiveRule = db.rules().insertRule(r -> r.setLanguage(XOO1.getKey())).getDefinition(); db.qualityProfiles().activateRule(profile, rule); db.qualityProfiles().activateRule(profile, deprecatedRule1); db.qualityProfiles().activateRule(profile, deprecatedRule2); SearchWsResponse result = call(ws.newRequest()); assertThat(result.getProfilesList()) .extracting(QualityProfile::getActiveRuleCount, QualityProfile::getActiveDeprecatedRuleCount) .containsExactlyInAnyOrder(tuple(3L, 2L)); }
@Test public void filter_on_module_key() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto module = db.components().insertComponent(newModuleDto(project)); QProfileDto profileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); QProfileDto defaultProfileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); QProfileDto defaultProfileOnXoo2 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO2.getKey())); db.qualityProfiles().associateWithProject(project, profileOnXoo1); db.qualityProfiles().setAsDefault(defaultProfileOnXoo1, defaultProfileOnXoo2); SearchWsResponse result = call(ws.newRequest().setParam(PARAM_PROJECT_KEY, module.getDbKey())); assertThat(result.getProfilesList()) .extracting(QualityProfile::getKey) .containsExactlyInAnyOrder(profileOnXoo1.getKee(), defaultProfileOnXoo2.getKee()) .doesNotContain(defaultProfileOnXoo1.getKee()); }
@Test public void actions_when_not_logged_in() { OrganizationDto organization = db.organizations().insert(); QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey())); userSession.anonymous(); SearchWsResponse result = call(ws.newRequest() .setParam(PARAM_ORGANIZATION, organization.getKey())); assertThat(result.getProfilesList()) .extracting(QualityProfile::getKey, qp -> qp.getActions().getEdit(), qp -> qp.getActions().getCopy(), qp -> qp.getActions().getSetAsDefault(), qp -> qp.getActions().getDelete(), qp -> qp.getActions().getAssociateProjects()) .containsExactlyInAnyOrder(tuple(profile.getKee(), false, false, false, false, false)); assertThat(result.getActions().getCreate()).isFalse(); }
@Test public void return_qprofile_on_free_organization() { OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(FREE)); QProfileDto qProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey())); SearchWsResponse result = call(ws.newRequest().setParam(PARAM_ORGANIZATION, organization.getKey())); assertThat(result.getProfilesList()).extracting(QualityProfile::getKey) .containsExactlyInAnyOrder(qProfile.getKee()); }
@Test public void filter_on_profile_name() { QProfileDto sonarWayOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setName("Sonar way").setLanguage(XOO1.getKey())); QProfileDto sonarWayOnXoo2 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setName("Sonar way").setLanguage(XOO1.getKey())); QProfileDto sonarWayInCamelCase = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setName("Sonar Way").setLanguage(XOO2.getKey())); QProfileDto anotherProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setName("Another").setLanguage(XOO2.getKey())); SearchWsResponse result = call(ws.newRequest().setParam(PARAM_QUALITY_PROFILE, "Sonar way")); assertThat(result.getProfilesList()).extracting(QualityProfile::getKey) .containsExactlyInAnyOrder(sonarWayOnXoo1.getKee(), sonarWayOnXoo2.getKee()) .doesNotContain(anotherProfile.getKee(), sonarWayInCamelCase.getKee()); }
@Test public void ignore_profiles_on_unknown_language() { QProfileDto profile1OnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); QProfileDto profile2OnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO2.getKey())); QProfileDto profileOnUnknownLanguage = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage("unknown")); SearchWsResponse result = call(ws.newRequest()); assertThat(result.getProfilesList()).extracting(QualityProfile::getKey) .containsExactlyInAnyOrder(profile1OnXoo1.getKee(), profile2OnXoo1.getKee()) .doesNotContain(profileOnUnknownLanguage.getKee()); }
@Test public void does_not_filter_when_defaults_is_false() { QProfileDto defaultProfile1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); QProfileDto defaultProfile2 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO2.getKey())); QProfileDto nonDefaultProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); db.qualityProfiles().setAsDefault(defaultProfile1, defaultProfile2); SearchWsResponse result = call(ws.newRequest().setParam(PARAM_DEFAULTS, "false")); assertThat(result.getProfilesList()).extracting(QualityProfile::getKey) .containsExactlyInAnyOrder(defaultProfile1.getKee(), defaultProfile2.getKee(), nonDefaultProfile.getKee()); }
@Test public void filter_on_default_profile() { QProfileDto defaultProfile1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); QProfileDto defaultProfile2 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO2.getKey())); QProfileDto nonDefaultProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); db.qualityProfiles().setAsDefault(defaultProfile1, defaultProfile2); SearchWsResponse result = call(ws.newRequest().setParam(PARAM_DEFAULTS, "true")); assertThat(result.getProfilesList()).extracting(QualityProfile::getKey) .containsExactlyInAnyOrder(defaultProfile1.getKee(), defaultProfile2.getKee()) .doesNotContain(nonDefaultProfile.getKee()); }