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 no_profile() { SearchWsResponse result = call(ws.newRequest()); assertThat(result.getProfilesList()).isEmpty(); }
@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(); }
@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()); }
@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()); }
@Test public void statistics_on_projects() { ComponentDto project1 = db.components().insertPrivateProject(); ComponentDto project2 = 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())); db.qualityProfiles().associateWithProject(project1, profileOnXoo1); db.qualityProfiles().associateWithProject(project2, profileOnXoo1); db.qualityProfiles().setAsDefault(defaultProfileOnXoo1); SearchWsResponse result = call(ws.newRequest()); assertThat(result.getProfilesList()) .extracting(QualityProfile::hasProjectCount, QualityProfile::getProjectCount) .containsExactlyInAnyOrder(tuple(true, 2L), tuple(false, 0L)); }
@Test public void filter_on_language() { QProfileDto profile1OnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); QProfileDto profile2OnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); QProfileDto profileOnXoo2 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO2.getKey())); SearchWsResponse result = call(ws.newRequest().setParam(PARAM_LANGUAGE, XOO1.getKey())); assertThat(result.getProfilesList()).extracting(QualityProfile::getKey) .containsExactlyInAnyOrder(profile1OnXoo1.getKee(), profile2OnXoo1.getKee()) .doesNotContain(profileOnXoo2.getKee()); }
@Test public void specific_organization() { OrganizationDto defaultOrganization = db.getDefaultOrganization(); OrganizationDto specificOrganization = db.organizations().insert(); QProfileDto profile1OnSpecificOrg = db.qualityProfiles().insert(specificOrganization, p -> p.setLanguage(XOO1.getKey())); QProfileDto profile2OnSpecificOrg = db.qualityProfiles().insert(specificOrganization, p -> p.setLanguage(XOO2.getKey())); QProfileDto profileOnDefaultOrg = db.qualityProfiles().insert(defaultOrganization, p -> p.setLanguage(XOO1.getKey())); SearchWsResponse result = call(ws.newRequest().setParam(PARAM_ORGANIZATION, specificOrganization.getKey())); assertThat(result.getProfilesList()).extracting(QualityProfile::getKey) .containsExactlyInAnyOrder(profile1OnSpecificOrg.getKee(), profile2OnSpecificOrg.getKee()) .doesNotContain(profileOnDefaultOrg.getKee()); }
@Test public void default_organization() { OrganizationDto defaultOrganization = db.getDefaultOrganization(); OrganizationDto anotherOrganization = db.organizations().insert(); QProfileDto profile1OnDefaultOrg = db.qualityProfiles().insert(defaultOrganization, p -> p.setLanguage(XOO1.getKey())); QProfileDto profile2OnDefaultOrg = db.qualityProfiles().insert(defaultOrganization, p -> p.setLanguage(XOO2.getKey())); QProfileDto profileOnAnotherOrg = db.qualityProfiles().insert(anotherOrganization, p -> p.setLanguage(XOO1.getKey())); SearchWsResponse result = call(ws.newRequest()); assertThat(result.getProfilesList()).extracting(QualityProfile::getKey) .containsExactlyInAnyOrder(profile1OnDefaultOrg.getKee(), profile2OnDefaultOrg.getKee()) .doesNotContain(profileOnAnotherOrg.getKee()); }
@Test public void filter_on_defaults_and_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(XOO2.getKey())); QProfileDto anotherProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setName("Another").setLanguage(XOO2.getKey())); db.qualityProfiles().setAsDefault(sonarWayOnXoo1, anotherProfile); SearchWsResponse result = call(ws.newRequest() .setParam(PARAM_DEFAULTS, "true") .setParam(PARAM_QUALITY_PROFILE, "Sonar way")); assertThat(result.getProfilesList()).extracting(QualityProfile::getKey) .containsExactlyInAnyOrder(sonarWayOnXoo1.getKee()) .doesNotContain(sonarWayOnXoo2.getKee(), anotherProfile.getKee()); }
@Test public void return_qprofile_on_paid_organization_when_user_is_member() { OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); QProfileDto qProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey())); UserDto user = db.users().insertUser(); userSession.logIn(user).addMembership(organization); SearchWsResponse result = call(ws.newRequest().setParam(PARAM_ORGANIZATION, organization.getKey())); assertThat(result.getProfilesList()).extracting(QualityProfile::getKey) .containsExactlyInAnyOrder(qProfile.getKee()); }
@Test public void empty_when_filtering_on_project_and_no_language_installed() { WsActionTester ws = new WsActionTester(new SearchAction(userSession, new Languages(), dbClient, qProfileWsSupport, new ComponentFinder(dbClient, null))); db.qualityProfiles().insert(db.getDefaultOrganization()); ComponentDto project = db.components().insertPrivateProject(); QProfileDto profileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); db.qualityProfiles().associateWithProject(project, profileOnXoo1); SearchWsResponse result = call(ws.newRequest() .setParam(PARAM_PROJECT_KEY, project.getDbKey()) .setParam(PARAM_DEFAULTS, "true")); assertThat(result.getProfilesList()).isEmpty(); }