RuleTesting.newDto(RuleKey.of("foo", "S113")).setLanguage("cpp").setTags(ImmutableSet.<String>of("T2", "T3")));
dbSession.commit();
// 0 assert Base
assertThat(index.countAll()).isEqualTo(9);
assertThat(index.search(new RuleQuery(), new QueryContext()).getHits()).hasSize(9);
// 1 Facet with no filters at all
Map<String, Collection<FacetValue>> facets = index.search(new RuleQuery(), new QueryContext().addFacets(Arrays.asList("languages", "repositories", "tags"))).getFacets();
assertThat(facets.keySet()).hasSize(3);
assertThat(facets.get(RuleIndex.FACET_LANGUAGES)).onProperty("key").containsOnly("cpp", "java", "cobol");
assertThat(facets.get(RuleIndex.FACET_REPOSITORIES)).onProperty("key").containsOnly("xoo", "foo");
assertThat(facets.get(RuleIndex.FACET_TAGS)).onProperty("key").containsOnly("systag1", "systag2", "T1", "T2", "T3", "T4");
// 2 Facet with a language filter
// -- lang facet should still have all language
Result<Rule> result = index.search(new RuleQuery()
.setLanguages(ImmutableList.<String>of("cpp"))
, new QueryContext().addFacets(Arrays.asList("languages", "repositories", "tags")));
assertThat(result.getHits()).hasSize(3);
assertThat(result.getFacets()).hasSize(3);
assertThat(result.getFacets().get(RuleIndex.FACET_LANGUAGES)).onProperty("key").containsOnly("cpp", "java", "cobol");
// 3 facet with 2 filters
// -- lang facet for tag T2
// -- tag facet for lang cpp
// -- repository for cpp & T2
result = index.search(new RuleQuery()
.setLanguages(ImmutableList.<String>of("cpp"))
.setTags(ImmutableList.<String>of("T2"))
, new QueryContext().addFacets(Arrays.asList("languages", "repositories", "tags")));
assertThat(result.getHits()).hasSize(1);
assertThat(result.getFacets().keySet()).hasSize(3);
assertThat(result.getFacets().get(RuleIndex.FACET_LANGUAGES)).onProperty("key").containsOnly("cpp", "java");
assertThat(result.getFacets().get(RuleIndex.FACET_REPOSITORIES)).onProperty("key").containsOnly("foo");
assertThat(result.getFacets().get(RuleIndex.FACET_TAGS)).onProperty("key").containsOnly("systag1", "systag2", "T2", "T3");
// 4 facet with 2 filters
// -- lang facet for tag T2
// -- tag facet for lang cpp & java
// -- repository for (cpp || java) & T2
result = index.search(new RuleQuery()
.setLanguages(ImmutableList.<String>of("cpp", "java"))
.setTags(ImmutableList.<String>of("T2"))
, new QueryContext().addFacets(Arrays.asList("languages", "repositories", "tags")));
assertThat(result.getHits()).hasSize(2);
assertThat(result.getFacets().keySet()).hasSize(3);
assertThat(result.getFacets().get(RuleIndex.FACET_LANGUAGES)).onProperty("key").containsOnly("cpp", "java");
assertThat(result.getFacets().get(RuleIndex.FACET_REPOSITORIES)).onProperty("key").containsOnly("foo", "xoo");
assertThat(result.getFacets().get(RuleIndex.FACET_TAGS)).onProperty("key").containsOnly("systag1", "systag2", "T1", "T2", "T3");