@Test public void filtering_on_favorites_returns_empty_results_if_not_logged_in() { userSession.anonymous(); 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()).isZero(); }
@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); }
ComponentDto project1 = insertProject(organization1Dto, c -> c .setDbKey(KEY_PROJECT_EXAMPLE_001) .setName("My Project 1") .setTagsString("finance, java"), new Measure(coverage, c -> c.setValue(80d))); ComponentDto project2 = insertProject(organization1Dto, c -> c .setDbKey(KEY_PROJECT_EXAMPLE_002) .setName("My Project 2"), new Measure(coverage, c -> c.setValue(90d))); ComponentDto project3 = insertProject(organization2Dto, c -> c .setDbKey(KEY_PROJECT_EXAMPLE_003) .setName("My Project 3") .setTagsString("sales, offshore, java"), new Measure(coverage, c -> c.setValue(20d))); addFavourite(project1);
private ComponentDto insertProject(OrganizationDto organizationDto, Measure... measures) { return insertProject(organizationDto, c -> { }, measures); }
@Test public void fail_if_page_size_greater_than_500() { userSession.logIn(); expectedException.expect(IllegalArgumentException.class); call(request.setPageSize(501)); }
@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 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 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_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 order_by_name_case_insensitive() { userSession.logIn(); OrganizationDto organization = db.organizations().insert(); insertProject(organization, c -> c.setName("Maven")); insertProject(organization, c -> c.setName("Apache")); insertProject(organization, c -> c.setName("guava")); SearchProjectsWsResponse result = call(request); assertThat(result.getComponentsList()).extracting(Component::getName) .containsExactly("Apache", "guava", "Maven"); }
@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 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 return_visibility_flag() { userSession.logIn(); OrganizationDto organization = db.organizations().insert(); ComponentDto privateProject = db.components().insertPublicProject(organization); authorizationIndexerTester.allowOnlyAnyone(privateProject); ComponentDto publicProject = db.components().insertPrivateProject(organization); authorizationIndexerTester.allowOnlyAnyone(publicProject); projectMeasuresIndexer.indexOnStartup(null); SearchProjectsWsResponse result = call(request); assertThat(result.getComponentsList()).extracting(Component::getKey, Component::getVisibility) .containsExactly( tuple(privateProject.getDbKey(), privateProject.isPrivate() ? "private" : "public"), tuple(publicProject.getDbKey(), publicProject.isPrivate() ? "private" : "public")); }
@Test public void sort_by_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")); assertThat(call(request.setSort("name").setAsc(true)).getComponentsList()).extracting(Component::getName) .containsExactly("Sonar Groovy", "Sonar Java", "Sonar Markdown", "Sonar Qube"); assertThat(call(request.setSort("name").setAsc(false)).getComponentsList()).extracting(Component::getName) .containsExactly("Sonar Qube", "Sonar Markdown", "Sonar Java", "Sonar Groovy"); }
@Test public void return_tags_facet() { userSession.logIn(); OrganizationDto organization = db.getDefaultOrganization(); insertProject(organization, c -> c.setTags(asList("finance", "platform"))); insertProject(organization, c -> c.setTags(singletonList("offshore"))); insertProject(organization, c -> c.setTags(singletonList("offshore"))); SearchProjectsWsResponse result = call(request.setFacets(singletonList(FILTER_TAGS))); Common.Facet facet = result.getFacets().getFacetsList().stream() .filter(oneFacet -> FILTER_TAGS.equals(oneFacet.getProperty())) .findFirst().orElseThrow(IllegalStateException::new); assertThat(facet.getValuesList()) .extracting(Common.FacetValue::getVal, Common.FacetValue::getCount) .containsExactly( tuple("offshore", 2L), tuple("finance", 1L), tuple("platform", 1L)); }
@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_text_query() { userSession.logIn(); OrganizationDto organizationDto = db.organizations().insert(); insertProject(organizationDto, c -> c.setDbKey("sonar-java").setName("Sonar Java")); insertProject(organizationDto, c -> c.setDbKey("sonar-groovy").setName("Sonar Groovy")); insertProject(organizationDto, c -> c.setDbKey("sonar-markdown").setName("Sonar Markdown")); insertProject(organizationDto, c -> c.setDbKey("sonarqube").setName("Sonar Qube")); assertThat(call(request.setFilter("query = \"Groovy\"")).getComponentsList()).extracting(Component::getName).containsOnly("Sonar Groovy"); assertThat(call(request.setFilter("query = \"oNar\"")).getComponentsList()).extracting(Component::getName).containsOnly("Sonar Java", "Sonar Groovy", "Sonar Markdown", "Sonar Qube"); assertThat(call(request.setFilter("query = \"sonar-java\"")).getComponentsList()).extracting(Component::getName).containsOnly("Sonar Java"); }
@Test public void paginate_result() { userSession.logIn(); OrganizationDto organization = db.organizations().insert(); IntStream.rangeClosed(1, 9).forEach(i -> insertProject(organization, c -> c.setName("PROJECT-" + i))); SearchProjectsWsResponse result = call(request.setPage(2).setPageSize(3)); assertThat(result.getPaging().getPageIndex()).isEqualTo(2); assertThat(result.getPaging().getPageSize()).isEqualTo(3); assertThat(result.getPaging().getTotal()).isEqualTo(9); assertThat(result.getComponentsCount()).isEqualTo(3); assertThat(result.getComponentsList()) .extracting(Component::getName) .containsExactly("PROJECT-4", "PROJECT-5", "PROJECT-6"); }
@Test public void return_tags_facet_with_tags_having_no_project_if_tags_is_in_filter() { userSession.logIn(); OrganizationDto organization = db.getDefaultOrganization(); insertProject(organization, c -> c.setTags(asList("finance", "platform"))); insertProject(organization, c -> c.setTags(singletonList("offshore"))); insertProject(organization, c -> c.setTags(singletonList("offshore"))); SearchProjectsWsResponse result = call(request.setFilter("tags = marketing").setFacets(singletonList(FILTER_TAGS))); Common.Facet facet = result.getFacets().getFacetsList().stream() .filter(oneFacet -> FILTER_TAGS.equals(oneFacet.getProperty())) .findFirst().orElseThrow(IllegalStateException::new); assertThat(facet.getValuesList()) .extracting(Common.FacetValue::getVal, Common.FacetValue::getCount) .containsExactly( tuple("offshore", 2L), tuple("finance", 1L), tuple("platform", 1L), tuple("marketing", 0L)); }
@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()); }