private SearchResults(List<ComponentDto> projects, Set<String> favoriteProjectUuids, SearchIdResult<String> searchResults, Map<String, SnapshotDto> analysisByProjectUuid, ProjectMeasuresQuery query) { this.projects = projects; this.favoriteProjectUuids = favoriteProjectUuids; this.total = (int) searchResults.getTotal(); this.facets = searchResults.getFacets(); this.analysisByProjectUuid = analysisByProjectUuid; this.query = query; } }
@Test public void languages_facet_should_return_top_100_items() { rangeClosed(1, 101).forEach(i -> db.rules().insert(r -> r.setLanguage("lang" + i))); index(); SearchIdResult result = underTest.search(new RuleQuery(), new SearchOptions().addFacets(singletonList(FACET_LANGUAGES))); assertThat(result.getFacets().get(FACET_LANGUAGES).size()).isEqualTo(100); }
/** * Facet with a language filter * -- lang facet should still have all language */ @Test public void sticky_facets_with_1_filter() { setupStickyFacets(); OrganizationDto organization = db.organizations().insert(); RuleQuery query = new RuleQuery().setOrganization(organization).setLanguages(ImmutableList.of("cpp")); SearchIdResult result = underTest.search(query, new SearchOptions().addFacets(asList(FACET_LANGUAGES, FACET_REPOSITORIES, FACET_TAGS))); assertThat(result.getIds()).hasSize(3); assertThat(result.getFacets().getAll()).hasSize(3); assertThat(result.getFacets().get(FACET_LANGUAGES).keySet()).containsOnly("cpp", "java", "cobol"); assertThat(result.getFacets().get(FACET_REPOSITORIES).keySet()).containsOnly("foo"); assertThat(result.getFacets().get(FACET_TAGS).keySet()).containsOnly("T2", "T3"); }
@Test public void repositories_facet_should_return_top_10_items() { rangeClosed(1, 11).forEach(i -> db.rules().insert(r -> r.setRepositoryKey("repo" + i))); index(); SearchIdResult result = underTest.search(new RuleQuery(), new SearchOptions().addFacets(singletonList(FACET_REPOSITORIES))); assertThat(result.getFacets().get(FACET_REPOSITORIES).size()).isEqualTo(10); }
private void verifyFacet(RuleQuery query, String facet, Map.Entry<String, Long>... expectedBuckets) { SearchIdResult<Integer> result = underTest.search(query, new SearchOptions().addFacets(facet)); assertThat(result.getFacets().get(facet)) .containsOnly(expectedBuckets); }
private void verifyNoFacet(RuleQuery query, String facet) { SearchIdResult<Integer> result = underTest.search(query, new SearchOptions().addFacets(facet)); assertThat(result.getFacets().get(facet)).isNull(); }
@Test public void tags_facet_should_return_top_100_items() { // default number of items returned in tag facet = 100 String[] tags = get101Tags(); createRule(setSystemTags(tags)); index(); RuleQuery query = new RuleQuery() .setOrganization(db.getDefaultOrganization()); SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS)); SearchIdResult result = underTest.search(query, options); assertThat(result.getFacets().get(FACET_TAGS).size()).isEqualTo(100); assertThat(result.getFacets().get(FACET_TAGS)).contains(entry("tag0", 1L), entry("tag25", 1L), entry("tag99", 1L)); assertThat(result.getFacets().get(FACET_TAGS)).doesNotContain(entry("tagA", 1L)); }
@Test public void tags_facet_should_include_matching_selected_items() { // default number of items returned in tag facet = 100 String[] tags = get101Tags(); createRule(setSystemTags(tags)); index(); RuleQuery query = new RuleQuery() .setOrganization(db.getDefaultOrganization()) .setTags(singletonList("tagA")); SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS)); SearchIdResult result = underTest.search(query, options); assertThat(result.getFacets().get(FACET_TAGS).size()).isEqualTo(101); assertThat(result.getFacets().get(FACET_TAGS).entrySet()).extracting(e -> entry(e.getKey(), e.getValue())).contains( // check that selected item is added, although there are 100 other items entry("tagA", 1L), entry("tag0", 1L), entry("tag25", 1L), entry("tag99", 1L)); }
@Test public void facet_tags_returns_more_than_10_tags_when_tags_filter_contains_value_not_in_top_10() { index( newDoc().setTags(newArrayList("finance1", "finance2", "finance3", "finance4", "finance5", "finance6", "finance7", "finance8", "finance9", "finance10")), newDoc().setTags(newArrayList("finance1", "finance2", "finance3", "finance4", "finance5", "finance6", "finance7", "finance8", "finance9", "finance10")), newDoc().setTags(newArrayList("solo", "solo2"))); Map<String, Long> result = underTest.search(new ProjectMeasuresQuery().setTags(ImmutableSet.of("solo", "solo2")), new SearchOptions().addFacets(FIELD_TAGS)).getFacets() .get(FIELD_TAGS); assertThat(result).hasSize(12).containsOnlyKeys("finance1", "finance2", "finance3", "finance4", "finance5", "finance6", "finance7", "finance8", "finance9", "finance10", "solo", "solo2"); }
@Test public void facet_languages_is_limited_to_10_languages() { index( newDoc().setLanguages(asList("<null>", "java", "xoo", "css", "cpp")), newDoc().setLanguages(asList("xml", "php", "python", "perl", "ruby")), newDoc().setLanguages(asList("js", "scala"))); Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(LANGUAGES)).getFacets(); assertThat(facets.get(LANGUAGES)).hasSize(10); }
private void assertNclocFacet(ProjectMeasuresQuery query, Long... facetExpectedValues) { checkArgument(facetExpectedValues.length == 5, "5 facet values is required"); Facets facets = underTest.search(query, new SearchOptions().addFacets(NCLOC)).getFacets(); assertThat(facets.get(NCLOC)).containsExactly( entry("*-1000.0", facetExpectedValues[0]), entry("1000.0-10000.0", facetExpectedValues[1]), entry("10000.0-100000.0", facetExpectedValues[2]), entry("100000.0-500000.0", facetExpectedValues[3]), entry("500000.0-*", facetExpectedValues[4])); } }
@Test public void tags_facet_should_be_available_if_organization_is_specified() { OrganizationDto organization = db.organizations().insert(); RuleQuery query = new RuleQuery().setOrganization(organization); SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS)); SearchIdResult result = underTest.search(query, options); assertThat(result.getFacets().get(FACET_TAGS)).isNotNull(); }
@Test public void facet_tags_returns_10_elements_by_default() { index( newDoc().setTags(newArrayList("finance1", "finance2", "finance3", "finance4", "finance5", "finance6", "finance7", "finance8", "finance9", "finance10")), newDoc().setTags(newArrayList("finance1", "finance2", "finance3", "finance4", "finance5", "finance6", "finance7", "finance8", "finance9", "finance10")), newDoc().setTags(newArrayList("solo"))); Map<String, Long> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(FIELD_TAGS)).getFacets().get(FIELD_TAGS); assertThat(result).hasSize(10).containsOnlyKeys("finance1", "finance2", "finance3", "finance4", "finance5", "finance6", "finance7", "finance8", "finance9", "finance10"); }
@Test public void facet_languages() { index( newDoc().setLanguages(singletonList("java")), newDoc().setLanguages(singletonList("java")), newDoc().setLanguages(singletonList("xoo")), newDoc().setLanguages(singletonList("xml")), newDoc().setLanguages(asList("<null>", "java")), newDoc().setLanguages(asList("<null>", "java", "xoo"))); Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(LANGUAGES)).getFacets(); assertThat(facets.get(LANGUAGES)).containsOnly( entry("<null>", 2L), entry("java", 4L), entry("xoo", 2L), entry("xml", 1L)); }
@Test public void does_not_return_facet_when_no_facets_in_options() { index( newDoc(PROJECT1, NCLOC, 10d, COVERAGE_KEY, 30d, MAINTAINABILITY_RATING, 3d) .setQualityGateStatus(OK.name())); Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions()).getFacets(); assertThat(facets.getAll()).isEmpty(); }
@Test public void facet_tags() { index( newDoc().setTags(newArrayList("finance", "offshore", "java")), newDoc().setTags(newArrayList("finance", "javascript")), newDoc().setTags(newArrayList("marketing", "finance")), newDoc().setTags(newArrayList("marketing", "offshore")), newDoc().setTags(newArrayList("finance", "marketing")), newDoc().setTags(newArrayList("finance"))); Map<String, Long> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(FIELD_TAGS)).getFacets().get(FIELD_TAGS); assertThat(result).containsOnly( entry("finance", 5L), entry("marketing", 3L), entry("offshore", 2L), entry("java", 1L), entry("javascript", 1L)); }
@Test public void facet_languages_contains_only_projects_authorized_for_user() { // User can see these projects indexForUser(USER1, newDoc().setLanguages(singletonList("java")), newDoc().setLanguages(asList("java", "xoo"))); // User cannot see these projects indexForUser(USER2, newDoc().setLanguages(singletonList("java")), newDoc().setLanguages(asList("java", "xoo"))); userSession.logIn(USER1); LinkedHashMap<String, Long> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(LANGUAGES)).getFacets().get(LANGUAGES); assertThat(result).containsOnly( entry("java", 2L), entry("xoo", 1L)); }
@Test public void tags_facet_should_not_find_tags_of_any_other_organization() { OrganizationDto organization1 = db.organizations().insert(); OrganizationDto organization2 = db.organizations().insert(); RuleDefinitionDto rule = createRule(setSystemTags()); createRuleMetadata(rule, organization1, setTags("bla1")); createRuleMetadata(rule, organization2, setTags("bla2")); index(); RuleQuery query = new RuleQuery().setOrganization(organization2); SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS)); SearchIdResult result = underTest.search(query, options); assertThat(result.getFacets().get(FACET_TAGS).entrySet()).extracting(e -> entry(e.getKey(), e.getValue())).containsExactly( entry("bla2", 1L)); }
@Test public void tags_facet_should_find_tags_of_specified_organization() { OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule = createRule(setSystemTags()); createRuleMetadata(rule, organization, setTags("bla")); index(); RuleQuery query = new RuleQuery().setOrganization(organization); SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS)); SearchIdResult result = underTest.search(query, options); assertThat(result.getFacets().get(FACET_TAGS)).contains(entry("bla", 1L)); }
@Test public void facet_tags_is_sticky() { index( newDoc().setTags(newArrayList("finance")).setQualityGateStatus(OK.name()), newDoc().setTags(newArrayList("finance")).setQualityGateStatus(ERROR.name()), newDoc().setTags(newArrayList("cpp")).setQualityGateStatus(ERROR.name())); Facets facets = underTest.search( new ProjectMeasuresQuery().setTags(newHashSet("cpp")), new SearchOptions().addFacets(FIELD_TAGS).addFacets(ALERT_STATUS_KEY)) .getFacets(); assertThat(facets.get(FIELD_TAGS)).containsOnly( entry("finance", 2L), entry("cpp", 1L)); assertThat(facets.get(ALERT_STATUS_KEY)).containsOnly( entry(OK.name(), 0L), entry(ERROR.name(), 1L), entry(WARN.name(), 0L)); }