@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); }
private void verifySearch(RuleQuery query, RuleDefinitionDto... expectedRules) { SearchIdResult<Integer> result = underTest.search(query, new SearchOptions()); assertThat(result.getTotal()).isEqualTo((long) expectedRules.length); assertThat(result.getIds()).hasSize(expectedRules.length); for (RuleDefinitionDto expectedRule : expectedRules) { assertThat(result.getIds()).contains(expectedRule.getId()); } }
public SearchIdResult<String> search(ProjectMeasuresQuery query, SearchOptions searchOptions) { SearchRequestBuilder requestBuilder = client .prepareSearch(INDEX_TYPE_PROJECT_MEASURES) .setFetchSource(false) .setFrom(searchOptions.getOffset()) .setSize(searchOptions.getLimit()); BoolQueryBuilder esFilter = boolQuery(); Map<String, QueryBuilder> filters = createFilters(query); filters.values().forEach(esFilter::must); requestBuilder.setQuery(esFilter); addFacets(requestBuilder, searchOptions, filters, query); addSort(query, requestBuilder); return new SearchIdResult<>(requestBuilder.get(), id -> id, system2.getDefaultTimeZone()); }
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; } }
private SearchResult doSearch(DbSession dbSession, RuleQuery query, SearchOptions context) { SearchIdResult<Integer> result = ruleIndex.search(query, context); List<Integer> ruleIds = result.getIds(); // rule order is managed by ES Map<Integer, RuleDto> rulesByRuleKey = Maps.uniqueIndex( dbClient.ruleDao().selectByIds(dbSession, query.getOrganization().getUuid(), ruleIds), RuleDto::getId); List<RuleDto> rules = new ArrayList<>(); for (Integer ruleId : ruleIds) { RuleDto rule = rulesByRuleKey.get(ruleId); if (rule != null) { rules.add(rule); } } List<Integer> templateRuleIds = rules.stream() .map(RuleDto::getTemplateId) .filter(Objects::nonNull) .collect(MoreCollectors.toList()); List<RuleDefinitionDto> templateRules = dbClient.ruleDao().selectDefinitionByIds(dbSession, templateRuleIds); List<RuleParamDto> ruleParamDtos = dbClient.ruleDao().selectRuleParamsByRuleIds(dbSession, ruleIds); return new SearchResult() .setRules(rules) .setRuleParameters(ruleParamDtos) .setTemplateRules(templateRules) .setFacets(result.getFacets()) .setTotal(result.getTotal()); }
private void assertResults(ProjectMeasuresQuery query, ComponentDto... expectedProjects) { List<String> result = underTest.search(query, new SearchOptions()).getIds(); assertThat(result).containsExactly(Arrays.stream(expectedProjects).map(ComponentDto::uuid).toArray(String[]::new)); }
/** * 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"); }
@CheckForNull public CompareToSonarWay getSonarWay(Request request, DbSession dbSession, OrganizationDto organization, QProfileDto profile) { if (!request.mandatoryParamAsBoolean(PARAM_COMPARE_TO_SONAR_WAY) || profile.isBuiltIn()) { return null; } QProfileDto sonarWay = Stream.of(SONAR_WAY, SONARQUBE_WAY) .map(name -> dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, organization, name, profile.getLanguage())) .filter(Objects::nonNull) .filter(QProfileDto::isBuiltIn) .findFirst() .orElse(null); if (sonarWay == null) { return null; } long missingRuleCount = ruleIndex.search( new RuleQuery().setQProfile(profile).setActivation(false).setCompareToQProfile(sonarWay), new SearchOptions().setLimit(1)) .getTotal(); return CompareToSonarWay.newBuilder() .setProfile(sonarWay.getKee()) .setProfileName(sonarWay.getName()) .setMissingRuleCount(missingRuleCount) .build(); }
public SearchIdResult(SearchResponse response, Function<String, ID> converter, TimeZone timeZone) { this.facets = new Facets(response, timeZone); this.total = response.getHits().getTotalHits(); this.ids = convertToIds(response.getHits(), converter); }
private void assertResults(ProjectMeasuresQuery query, String... expectedProjectUuids) { List<String> result = underTest.search(query, new SearchOptions()).getIds(); assertThat(result).containsExactly(expectedProjectUuids); }
private SearchResult doSearch(DbSession dbSession, RuleQuery query, SearchOptions context) { SearchIdResult<Integer> result = ruleIndex.search(query, context); List<Integer> ruleIds = result.getIds(); // rule order is managed by ES Map<Integer, RuleDto> rulesByRuleKey = Maps.uniqueIndex( dbClient.ruleDao().selectByIds(dbSession, query.getOrganization().getUuid(), ruleIds), RuleDto::getId); List<RuleDto> rules = new ArrayList<>(); for (Integer ruleId : ruleIds) { RuleDto rule = rulesByRuleKey.get(ruleId); if (rule != null) { rules.add(rule); } } List<Integer> templateRuleIds = rules.stream() .map(RuleDto::getTemplateId) .filter(Objects::nonNull) .collect(MoreCollectors.toList()); List<RuleDefinitionDto> templateRules = dbClient.ruleDao().selectDefinitionByIds(dbSession, templateRuleIds); List<RuleParamDto> ruleParamDtos = dbClient.ruleDao().selectRuleParamsByRuleIds(dbSession, ruleIds); return new SearchResult() .setRules(rules) .setRuleParameters(ruleParamDtos) .setTemplateRules(templateRules) .setFacets(result.getFacets()) .setTotal(result.getTotal()); }
/** * Facet with 3 filters * -- lang facet for tag T2 * -- tag facet for lang cpp & java * -- repository for (cpp || java) & T2 * -- type */ @Test public void sticky_facets_with_3_filters() { setupStickyFacets(); RuleQuery query = new RuleQuery() .setOrganization(db.getDefaultOrganization()) .setLanguages(ImmutableList.of("cpp", "java")) .setTags(ImmutableList.of("T2")) .setTypes(asList(BUG, CODE_SMELL)); SearchIdResult result = underTest.search(query, new SearchOptions().addFacets(asList(FACET_LANGUAGES, FACET_REPOSITORIES, FACET_TAGS, FACET_TYPES))); assertThat(result.getIds()).hasSize(2); assertThat(result.getFacets().getAll()).hasSize(4); assertThat(result.getFacets().get(FACET_LANGUAGES).keySet()).containsOnly("cpp", "java"); assertThat(result.getFacets().get(FACET_REPOSITORIES).keySet()).containsOnly("foo", "xoo"); assertThat(result.getFacets().get(FACET_TAGS).keySet()).containsOnly("T1", "T2", "T3"); assertThat(result.getFacets().get(FACET_TYPES).keySet()).containsOnly("CODE_SMELL"); }
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 disable_then_enable_rule() { // Install rule when(system.now()).thenReturn(DATE1.getTime()); execute(new FakeRepositoryV1()); // Uninstall rule when(system.now()).thenReturn(DATE2.getTime()); execute(); RuleDto rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY1); assertThat(rule.getStatus()).isEqualTo(REMOVED); assertThat(ruleIndex.search(new RuleQuery().setKey(RULE_KEY1.toString()), new SearchOptions()).getTotal()).isEqualTo(0); // Re-install rule when(system.now()).thenReturn(DATE3.getTime()); execute(new FakeRepositoryV1()); rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY1); assertThat(rule.getStatus()).isEqualTo(RuleStatus.BETA); assertThat(ruleIndex.search(new RuleQuery().setKey(RULE_KEY1.toString()), new SearchOptions()).getTotal()).isEqualTo(1); }
public SearchIdResult(SearchResponse response, Function<String, ID> converter, TimeZone timeZone) { this.facets = new Facets(response, timeZone); this.total = response.getHits().getTotalHits(); this.ids = convertToIds(response.getHits(), converter); }
@Test public void paginate_results() { IntStream.rangeClosed(1, 9) .forEach(i -> index(newDoc(newPrivateProjectDto(ORG, "P" + i)))); SearchIdResult<String> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().setPage(2, 3)); assertThat(result.getIds()).containsExactly("P4", "P5", "P6"); assertThat(result.getTotal()).isEqualTo(9); }
@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); }
@Test public void sticky_facets_base() { setupStickyFacets(); RuleQuery query = new RuleQuery(); assertThat(underTest.search(query, new SearchOptions()).getIds()).hasSize(9); }
/** * Facet with 2 filters * -- lang facet for tag T2 * -- tag facet for lang cpp * -- repository for cpp & T2 */ @Test public void sticky_facets_with_2_filters() { setupStickyFacets(); RuleQuery query = new RuleQuery() .setOrganization(db.getDefaultOrganization()) .setLanguages(ImmutableList.of("cpp")) .setTags(ImmutableList.of("T2")); SearchIdResult result = underTest.search(query, new SearchOptions().addFacets(asList(FACET_LANGUAGES, FACET_REPOSITORIES, FACET_TAGS))); assertThat(result.getIds()).hasSize(1); Facets facets = result.getFacets(); assertThat(facets.getAll()).hasSize(3); assertThat(facets.get(FACET_LANGUAGES).keySet()).containsOnly("cpp", "java"); assertThat(facets.get(FACET_REPOSITORIES).keySet()).containsOnly("foo"); assertThat(facets.get(FACET_TAGS).keySet()).containsOnly("T2", "T3"); }
@Test public void update_only_rule_name() { when(system.now()).thenReturn(DATE1.getTime()); execute((RulesDefinition) context -> { NewRepository repo = context.createRepository("fake", "java"); repo.createRule("rule") .setName("Name1") .setHtmlDescription("Description"); repo.done(); }); when(system.now()).thenReturn(DATE2.getTime()); execute((RulesDefinition) context -> { NewRepository repo = context.createRepository("fake", "java"); repo.createRule("rule") .setName("Name2") .setHtmlDescription("Description"); repo.done(); }); // rule1 has been updated RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of("fake", "rule")); assertThat(rule1.getName()).isEqualTo("Name2"); assertThat(rule1.getDescription()).isEqualTo("Description"); assertThat(ruleIndex.search(new RuleQuery().setQueryText("Name2"), new SearchOptions()).getTotal()).isEqualTo(1); assertThat(ruleIndex.search(new RuleQuery().setQueryText("Name1"), new SearchOptions()).getTotal()).isEqualTo(0); }