]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-12499 - Increase the size of security standard facets returned in issue search
authorLéo Geoffroy <leo.geoffroy@sonarsource.com>
Wed, 30 Mar 2022 10:16:19 +0000 (12:16 +0200)
committersonartech <sonartech@sonarsource.com>
Fri, 1 Apr 2022 08:22:58 +0000 (08:22 +0000)
server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndex.java
server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java

index 0c2e260eeaedb0b19dd31b4e92e208a6c98c22d3..f4df56d0a84e7bae67e9b89475a816872d8e4c31 100644 (file)
@@ -63,6 +63,7 @@ import org.sonar.server.es.SearchOptions;
 import org.sonar.server.es.StickyFacetBuilder;
 import org.sonar.server.es.newindex.DefaultIndexSettings;
 import org.sonar.server.es.textsearch.JavaTokenizer;
+import org.sonar.server.security.SecurityStandards;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.lang.Boolean.FALSE;
@@ -506,7 +507,7 @@ public class RuleIndex {
       Collection<String> categories = query.getSonarsourceSecurity();
       aggregations.put(FACET_SONARSOURCE_SECURITY,
         stickyFacetBuilder.buildStickyFacet(FIELD_RULE_SONARSOURCE_SECURITY, FACET_SONARSOURCE_SECURITY,
-          FACET_DEFAULT_SIZE, filterSecurityCategories(),
+          SecurityStandards.SQCategory.values().length, filterSecurityCategories(),
           (categories == null) ? (new String[0]) : categories.toArray()));
     }
   }
index 8f367c1069d9aace3ea70a3b55fba0a450a815cf..9ca8078f54f8e99bf375af2ba8a06c9491bc30d7 100644 (file)
@@ -21,10 +21,15 @@ package org.sonar.server.rule.index;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Sets;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.function.Consumer;
+import java.util.stream.Collectors;
+import org.assertj.core.api.Assertions;
 import org.junit.Rule;
 import org.junit.Test;
 import org.sonar.api.impl.utils.AlwaysIncreasingSystem2;
@@ -40,6 +45,7 @@ import org.sonar.server.es.Facets;
 import org.sonar.server.es.SearchIdResult;
 import org.sonar.server.es.SearchOptions;
 import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
+import org.sonar.server.security.SecurityStandards;
 
 import static com.google.common.collect.ImmutableSet.of;
 import static java.util.Arrays.asList;
@@ -505,6 +511,25 @@ public class RuleIndexTest {
     assertThat(results.getUuids()).containsOnly(rule1.getUuid(), rule3.getUuid());
   }
 
+  @Test
+  public void search_by_security_sonarsource_return_complete_list_of_facets() {
+
+    List<RuleDefinitionDto> rules = new ArrayList<>();
+
+    //Creation of one rule for each standard security category defined (except other)
+    for (Map.Entry<SecurityStandards.SQCategory, Set<String>> sqCategorySetEntry : SecurityStandards.CWES_BY_SQ_CATEGORY.entrySet()) {
+      rules.add(createRule(setSecurityStandards(of("cwe:" + sqCategorySetEntry.getValue().iterator().next())), r -> r.setType(SECURITY_HOTSPOT)));
+    }
+    index();
+
+    RuleQuery query = new RuleQuery();
+    SearchIdResult<String> results = underTest.search(query, new SearchOptions().addFacets("sonarsourceSecurity"));
+
+    assertThat(results.getFacets().get("sonarsourceSecurity"))
+      .as("It should have as many facets returned as there are rules defined, and it is not truncated")
+      .hasSize(rules.size());
+  }
+
   @Test
   public void compare_to_another_profile() {
     String xoo = "xoo";