@Test public void empty_result() { userSession.logIn(); SearchProjectsWsResponse result = call(request); assertThat(result.getComponentsCount()).isEqualTo(0); Common.Paging paging = result.getPaging(); assertThat(paging.getPageIndex()).isEqualTo(1); assertThat(paging.getPageSize()).isEqualTo(100); assertThat(paging.getTotal()).isEqualTo(0); }
@Test public void fail_if_page_size_greater_than_500() { userSession.logIn(); expectedException.expect(IllegalArgumentException.class); call(request.setPageSize(501)); }
@Test public void filter_projects_on_favorites() { userSession.logIn(); OrganizationDto organization = db.organizations().insert(); ComponentDto javaProject = insertProject(organization); ComponentDto markDownProject = insertProject(organization); ComponentDto sonarQubeProject = insertProject(organization); Stream.of(javaProject, markDownProject).forEach(this::addFavourite); SearchProjectsWsResponse result = call(request.setFilter("isFavorite")); assertThat(result.getComponentsCount()).isEqualTo(2); assertThat(result.getComponentsList()).extracting(Component::getKey).containsExactly(javaProject.getDbKey(), markDownProject.getDbKey()); }
@Test public void fail_when_filter_metrics_are_unknown() { userSession.logIn(); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Following metrics are not supported: 'debt'"); request.setFilter("debt > 80"); call(request); }
@Test public void fail_when_sort_metrics_are_unknown() { userSession.logIn(); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Value of parameter 's' (debt) must be one of: ["); request.setSort("debt"); call(request); }
@Test public void do_not_return_isFavorite_if_anonymous_user() { userSession.anonymous(); OrganizationDto organization = db.organizations().insert(); insertProject(organization); SearchProjectsWsResponse result = call(request); assertThat(result.getComponentsList()).extracting(Component::hasIsFavorite).containsExactlyInAnyOrder(false); }
@Test public void filter_projects_by_tags() { userSession.logIn(); OrganizationDto organizationDto = db.organizations().insert(); ComponentDto project1 = insertProject(organizationDto, c -> c.setTags(asList("finance", "platform"))); ComponentDto project2 = insertProject(organizationDto, c -> c.setTags(singletonList("marketing"))); ComponentDto project3 = insertProject(organizationDto, c -> c.setTags(singletonList("offshore"))); SearchProjectsWsResponse result = call(request.setFilter("tags in (finance, offshore)")); assertThat(result.getComponentsList()).extracting(Component::getKey).containsExactlyInAnyOrder(project1.getDbKey(), project3.getDbKey()); }
@Test public void does_not_return_branches() { ComponentDto project = db.components().insertMainBranch(); authorizationIndexerTester.allowOnlyAnyone(project); ComponentDto branch = db.components().insertProjectBranch(project); projectMeasuresIndexer.indexOnStartup(null); SearchProjectsWsResponse result = call(request); assertThat(result.getComponentsList()).extracting(Component::getKey) .containsExactlyInAnyOrder(project.getDbKey()); }
@Test public void default_sort_is_by_ascending_name() { userSession.logIn(); OrganizationDto organization = db.getDefaultOrganization(); insertProject(organization, c -> c.setName("Sonar Java")); insertProject(organization, c -> c.setName("Sonar Groovy")); insertProject(organization, c -> c.setName("Sonar Markdown")); insertProject(organization, c -> c.setName("Sonar Qube")); SearchProjectsWsResponse result = call(request); assertThat(result.getComponentsList()).extracting(Component::getName).containsExactly("Sonar Groovy", "Sonar Java", "Sonar Markdown", "Sonar Qube"); }
@Test public void filter_projects_by_no_duplication_should_not_return_projects_with_duplication() { userSession.logIn(); OrganizationDto organizationDto = db.organizations().insert(); MetricDto coverage = db.measures().insertMetric(c -> c.setKey(COVERAGE).setValueType("PERCENT")); MetricDto duplications = db.measures().insertMetric(c -> c.setKey(DUPLICATED_LINES_DENSITY_KEY).setValueType("PERCENT")); insertProject(organizationDto, new Measure(duplications, c -> c.setValue(10d)), new Measure(coverage, c -> c.setValue(50d))); SearchProjectsWsResponse result = call(request.setFilter("duplicated_lines_density = NO_DATA")); assertThat(result.getComponentsList()).extracting(Component::getKey).isEmpty(); }
@Test public void filter_projects_by_new_coverage() { userSession.logIn(); OrganizationDto organizationDto = db.organizations().insert(); MetricDto coverage = db.measures().insertMetric(c -> c.setKey(NEW_COVERAGE).setValueType("PERCENT")); ComponentDto project1 = insertProject(organizationDto, new Measure(coverage, c -> c.setVariation(80d))); ComponentDto project2 = insertProject(organizationDto, new Measure(coverage, c -> c.setVariation(85d))); ComponentDto project3 = insertProject(organizationDto, new Measure(coverage, c -> c.setVariation(10d))); SearchProjectsWsResponse result = call(request.setFilter("new_coverage <= 80")); assertThat(result.getComponentsList()).extracting(Component::getKey).containsExactlyInAnyOrder(project1.getDbKey(), project3.getDbKey()); }
@Test public void filter_projects_by_duplications() { userSession.logIn(); OrganizationDto organizationDto = db.organizations().insert(); MetricDto duplications = db.measures().insertMetric(c -> c.setKey(DUPLICATED_LINES_DENSITY_KEY).setValueType("PERCENT")); ComponentDto project1 = insertProject(organizationDto, new Measure(duplications, c -> c.setValue(80d))); ComponentDto project2 = insertProject(organizationDto, new Measure(duplications, c -> c.setValue(85d))); ComponentDto project3 = insertProject(organizationDto, new Measure(duplications, c -> c.setValue(10d))); SearchProjectsWsResponse result = call(request.setFilter("duplicated_lines_density <= 80")); assertThat(result.getComponentsList()).extracting(Component::getKey).containsExactlyInAnyOrder(project1.getDbKey(), project3.getDbKey()); }
@Test public void filter_projects_by_coverage() { userSession.logIn(); OrganizationDto organizationDto = db.organizations().insert(); MetricDto coverage = db.measures().insertMetric(c -> c.setKey(COVERAGE).setValueType("PERCENT")); ComponentDto project1 = insertProject(organizationDto, new Measure(coverage, c -> c.setValue(80d))); ComponentDto project2 = insertProject(organizationDto, new Measure(coverage, c -> c.setValue(85d))); ComponentDto project3 = insertProject(organizationDto, new Measure(coverage, c -> c.setValue(10d))); SearchProjectsWsResponse result = call(request.setFilter("coverage <= 80")); assertThat(result.getComponentsList()).extracting(Component::getKey).containsExactlyInAnyOrder(project1.getDbKey(), project3.getDbKey()); }
@Test public void filter_projects_by_new_duplications() { userSession.logIn(); OrganizationDto organizationDto = db.organizations().insert(); MetricDto newDuplications = db.measures().insertMetric(c -> c.setKey(NEW_DUPLICATED_LINES_DENSITY_KEY).setValueType("PERCENT")); ComponentDto project1 = insertProject(organizationDto, new Measure(newDuplications, c -> c.setVariation(80d))); ComponentDto project2 = insertProject(organizationDto, new Measure(newDuplications, c -> c.setVariation(85d))); ComponentDto project3 = insertProject(organizationDto, new Measure(newDuplications, c -> c.setVariation(10d))); SearchProjectsWsResponse result = call(request.setFilter("new_duplicated_lines_density <= 80")); assertThat(result.getComponentsList()).extracting(Component::getKey).containsExactlyInAnyOrder(project1.getDbKey(), project3.getDbKey()); }
@Test @UseDataProvider("rating_metric_keys") public void filter_projects_by_rating(String metricKey) { userSession.logIn(); OrganizationDto organizationDto = db.organizations().insert(); MetricDto ratingMetric = db.measures().insertMetric(c -> c.setKey(metricKey).setValueType(INT.name())); ComponentDto project1 = insertProject(organizationDto, new Measure(ratingMetric, c -> c.setValue(1d))); ComponentDto project2 = insertProject(organizationDto, new Measure(ratingMetric, c -> c.setValue(2d))); ComponentDto project3 = insertProject(organizationDto, new Measure(ratingMetric, c -> c.setValue(3d))); SearchProjectsWsResponse result = call(request.setFilter(metricKey + " = 2")); assertThat(result.getComponentsList()).extracting(Component::getKey).containsExactly(project2.getDbKey()); }
@Test @UseDataProvider("new_rating_metric_keys") public void filter_projects_by_new_rating(String newMetricKey) { userSession.logIn(); OrganizationDto organizationDto = db.organizations().insert(); MetricDto ratingMetric = db.measures().insertMetric(c -> c.setKey(newMetricKey).setValueType(INT.name())); ComponentDto project1 = insertProject(organizationDto, new Measure(ratingMetric, c -> c.setVariation(1d))); ComponentDto project2 = insertProject(organizationDto, new Measure(ratingMetric, c -> c.setVariation(2d))); ComponentDto project3 = insertProject(organizationDto, new Measure(ratingMetric, c -> c.setVariation(3d))); SearchProjectsWsResponse result = call(request.setFilter(newMetricKey + " = 2")); assertThat(result.getComponentsList()).extracting(Component::getKey).containsExactly(project2.getDbKey()); }
@Test public void filter_projects_by_ncloc() { userSession.logIn(); OrganizationDto organizationDto = db.organizations().insert(); MetricDto ncloc = db.measures().insertMetric(c -> c.setKey(NCLOC).setValueType(INT.name())); ComponentDto project1 = insertProject(organizationDto, new Measure(ncloc, c -> c.setValue(80d))); ComponentDto project2 = insertProject(organizationDto, new Measure(ncloc, c -> c.setValue(85d))); ComponentDto project3 = insertProject(organizationDto, new Measure(ncloc, c -> c.setValue(10d))); SearchProjectsWsResponse result = call(request.setFilter("ncloc <= 80")); assertThat(result.getComponentsList()).extracting(Component::getKey).containsExactlyInAnyOrder(project1.getDbKey(), project3.getDbKey()); }
@Test public void filter_projects_by_new_lines() { userSession.logIn(); OrganizationDto organizationDto = db.organizations().insert(); MetricDto newLines = db.measures().insertMetric(c -> c.setKey(NEW_LINES_KEY).setValueType(INT.name())); ComponentDto project1 = insertProject(organizationDto, new Measure(newLines, c -> c.setVariation(80d))); ComponentDto project2 = insertProject(organizationDto, new Measure(newLines, c -> c.setVariation(85d))); ComponentDto project3 = insertProject(organizationDto, new Measure(newLines, c -> c.setVariation(10d))); SearchProjectsWsResponse result = call(request.setFilter("new_lines <= 80")); assertThat(result.getComponentsList()).extracting(Component::getKey).containsExactlyInAnyOrder(project1.getDbKey(), project3.getDbKey()); }
@Test public void filter_projects_by_no_duplication() { userSession.logIn(); OrganizationDto organizationDto = db.organizations().insert(); MetricDto coverage = db.measures().insertMetric(c -> c.setKey(COVERAGE).setValueType("PERCENT")); MetricDto duplications = db.measures().insertMetric(c -> c.setKey(DUPLICATED_LINES_DENSITY_KEY).setValueType("PERCENT")); ComponentDto project1 = insertProject(organizationDto, new Measure(coverage, c -> c.setValue(10d))); ComponentDto project2 = insertProject(organizationDto, new Measure(duplications, c -> c.setValue(0d))); ComponentDto project3 = insertProject(organizationDto, new Measure(duplications, c -> c.setValue(79d))); SearchProjectsWsResponse result = call(request.setFilter("duplicated_lines_density = NO_DATA")); assertThat(result.getComponentsList()).extracting(Component::getKey).containsExactlyInAnyOrder(project1.getDbKey()); }
@Test public void filter_projects_by_languages() { userSession.logIn(); OrganizationDto organizationDto = db.organizations().insert(); MetricDto languagesDistribution = db.measures().insertMetric(c -> c.setKey(NCLOC_LANGUAGE_DISTRIBUTION_KEY).setValueType("DATA")); ComponentDto project1 = insertProject(organizationDto, new Measure(languagesDistribution, c -> c.setValue(null).setData("<null>=2;java=6;xoo=18"))); ComponentDto project2 = insertProject(organizationDto, new Measure(languagesDistribution, c -> c.setValue(null).setData("java=3;xoo=9"))); ComponentDto project3 = insertProject(organizationDto, new Measure(languagesDistribution, c -> c.setValue(null).setData("xoo=1"))); ComponentDto project4 = insertProject(organizationDto, new Measure(languagesDistribution, c -> c.setValue(null).setData("<null>=1;java=5;xoo=13"))); SearchProjectsWsResponse result = call(request.setFilter("languages IN (java, js, <null>)")); assertThat(result.getComponentsList()).extracting(Component::getKey).containsExactlyInAnyOrder(project1.getDbKey(), project2.getDbKey(), project4.getDbKey()); }