]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10575 Modify flag to include external rules in rules search
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Mon, 23 Apr 2018 12:53:52 +0000 (14:53 +0200)
committerSonarTech <sonartech@sonarsource.com>
Thu, 26 Apr 2018 18:20:53 +0000 (20:20 +0200)
12 files changed:
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRulesAction.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRulesAction.java
server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java
server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleQuery.java
server/sonar-server/src/main/java/org/sonar/server/rule/ws/RuleQueryFactory.java
server/sonar-server/src/main/java/org/sonar/server/rule/ws/RulesWsParameters.java
server/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java
server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java
server/sonar-server/src/test/java/org/sonar/server/rule/ws/RuleQueryFactoryTest.java
sonar-ws/src/main/java/org/sonarqube/ws/client/rules/RulesService.java
sonar-ws/src/main/java/org/sonarqube/ws/client/rules/SearchRequest.java
tests/src/test/java/org/sonarqube/tests/issue/ExternalIssueTest.java

index bdc71f6fdb89c7b0e14f01bea0135ae7a24d7699..ca1f86174bee09ca55ee8db92f35326bdea58d8a 100644 (file)
@@ -95,7 +95,7 @@ public class ActivateRulesAction implements QProfileWsAction {
       wsSupport.checkCanEdit(dbSession, organization, profile);
       wsSupport.checkNotBuiltInt(profile);
       RuleQuery ruleQuery = ruleQueryFactory.createRuleQuery(dbSession, request);
-      ruleQuery.setIsExternal(false);
+      ruleQuery.setIncludeExternal(false);
       result = qProfileRules.bulkActivateAndCommit(dbSession, profile, ruleQuery, request.param(PARAM_TARGET_SEVERITY));
     }
 
index f8ee01e8e49bbe7ea5376d9bcc7981519345fe87..b561083f9176f00b3e21936835ac237cfe64f33b 100644 (file)
@@ -87,7 +87,7 @@ public class DeactivateRulesAction implements QProfileWsAction {
       OrganizationDto organization = wsSupport.getOrganization(dbSession, profile);
       wsSupport.checkCanEdit(dbSession, organization, profile);
       RuleQuery ruleQuery = ruleQueryFactory.createRuleQuery(dbSession, request);
-      ruleQuery.setIsExternal(false);
+      ruleQuery.setIncludeExternal(false);
       result = ruleActivator.bulkDeactivateAndCommit(dbSession, profile, ruleQuery);
     }
     writeResponse(result, response);
index d93d6fc5893d2a745b5da37543bfc09e148fce30..c1c2404d83853ee1d5efab6d9c83181f795c094b 100644 (file)
@@ -302,7 +302,7 @@ public class RuleIndex {
         QueryBuilders.termQuery(FIELD_RULE_IS_TEMPLATE, Boolean.toString(isTemplate)));
     }
 
-    Boolean isExternal = query.isExternal();
+    Boolean isExternal = query.includeExternal();
     if (isExternal != null) {
       filters.put(FIELD_RULE_IS_EXTERNAL,
         QueryBuilders.termQuery(FIELD_RULE_IS_EXTERNAL, Boolean.toString(isExternal)));
index 4b79ffcfcd9159e1548b3a95d8efb483d9ab0984..b4565b7ed5f927846f5f43d4024fcfc63757004c 100644 (file)
@@ -54,7 +54,7 @@ public class RuleQuery {
   private String internalKey;
   private String ruleKey;
   private OrganizationDto organization;
-  private Boolean isExternal;
+  private Boolean includeExternal;
 
   @CheckForNull
   public QProfileDto getQProfile() {
@@ -206,13 +206,12 @@ public class RuleQuery {
     return this;
   }
 
-  @CheckForNull
-  public Boolean isExternal() {
-    return isExternal;
+  public Boolean includeExternal() {
+    return includeExternal;
   }
 
-  public RuleQuery setIsExternal(@Nullable Boolean b) {
-    this.isExternal = b;
+  public RuleQuery setIncludeExternal(@Nullable Boolean b) {
+    this.includeExternal = b;
     return this;
   }
 
index de3c14b118c513dbf57ccd73bbc8952d611ff164..6755309c9bf147b0e19c8b919eb6d54d61828068 100644 (file)
@@ -43,7 +43,7 @@ import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_AVAILABLE_SINCE;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_COMPARE_TO_PROFILE;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INHERITANCE;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_TEMPLATE;
-import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_EXTERNAL;
+import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INCLUDE_EXTERNAL;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_LANGUAGES;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ORGANIZATION;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_QPROFILE;
@@ -72,7 +72,7 @@ public class RuleQueryFactory {
    */
   public RuleQuery createRuleSearchQuery(DbSession dbSession, Request request) {
     RuleQuery query = createRuleQuery(dbSession, request);
-    query.setIsExternal(request.mandatoryParamAsBoolean(PARAM_IS_EXTERNAL));
+    query.setIncludeExternal(request.mandatoryParamAsBoolean(PARAM_INCLUDE_EXTERNAL));
     return query;
   }
 
index 50009dc6730f56071e038ad9381761a5b695f3e1..037610d689dd95dc2cba44498fa23f881252e8dd 100644 (file)
@@ -36,7 +36,7 @@ public class RulesWsParameters {
   public static final String PARAM_INHERITANCE = "inheritance";
   public static final String PARAM_ACTIVE_SEVERITIES = "active_severities";
   public static final String PARAM_IS_TEMPLATE = "is_template";
-  public static final String PARAM_IS_EXTERNAL = "is_external";
+  public static final String PARAM_INCLUDE_EXTERNAL = "include_external";
   public static final String PARAM_TEMPLATE_KEY = "template_key";
   public static final String PARAM_ORGANIZATION = "organization";
   public static final String PARAM_COMPARE_TO_PROFILE = "compareToProfile";
index ba7039a586fe79a86d605f0dff291d2cd766cdff..fcb44a3f5f72e3f9e6e164f3119bb6ce6f69f625 100644 (file)
@@ -84,8 +84,8 @@ import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVATION;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVE_SEVERITIES;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_AVAILABLE_SINCE;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_COMPARE_TO_PROFILE;
+import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INCLUDE_EXTERNAL;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INHERITANCE;
-import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_EXTERNAL;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_TEMPLATE;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_LANGUAGES;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ORGANIZATION;
@@ -208,8 +208,8 @@ public class SearchAction implements RulesWsAction {
 
   static void defineIsExternalParam(WebService.NewAction action) {
     action
-      .createParam(PARAM_IS_EXTERNAL)
-      .setDescription("Filter external engine rules")
+      .createParam(PARAM_INCLUDE_EXTERNAL)
+      .setDescription("Include external engine rules in the results")
       .setDefaultValue(false)
       .setBooleanPossibleValues()
       .setSince("7.2");
index 5a72e8fb77f3032c75058b45611d79ca0ff87f25..3c81b0748aad03743c5a6e05f33459d64ed4ab48 100644 (file)
@@ -32,13 +32,17 @@ import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
+import org.sonar.api.rule.Severity;
+import org.sonar.api.rules.RuleType;
 import org.sonar.api.utils.System2;
 import org.sonar.api.utils.internal.AlwaysIncreasingSystem2;
 import org.sonar.db.DbTester;
 import org.sonar.db.organization.OrganizationDto;
 import org.sonar.db.qualityprofile.QProfileDto;
 import org.sonar.db.rule.RuleDefinitionDto;
+import org.sonar.db.rule.RuleDto;
 import org.sonar.db.rule.RuleMetadataDto;
+import org.sonar.db.rule.RuleDto.Scope;
 import org.sonar.server.es.EsTester;
 import org.sonar.server.es.Facets;
 import org.sonar.server.es.SearchIdResult;
@@ -46,6 +50,7 @@ import org.sonar.server.es.SearchOptions;
 import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
 
 import static com.google.common.collect.ImmutableSet.of;
+import static com.google.common.collect.Sets.newHashSet;
 import static java.util.Arrays.asList;
 import static java.util.Collections.emptyList;
 import static java.util.Collections.emptySet;
@@ -212,6 +217,30 @@ public class RuleIndexTest {
     assertThat(results).containsOnly(rule.getId());
   }
 
+  @Test
+  public void search_external_rule() {
+
+    RuleDefinitionDto rule = new RuleDefinitionDto()
+      .setId(123)
+      .setRuleKey("S001")
+      .setRepositoryKey("external_xoo")
+      .setName("xoo:S001")
+      .setSeverity(Severity.BLOCKER)
+      .setStatus(RuleStatus.READY)
+      .setIsTemplate(false)
+      .setIsExternal(true)
+      .setType(RuleType.BUG)
+      .setScope(Scope.ALL)
+      .setCreatedAt(1500000000000L)
+      .setUpdatedAt(1600000000000L);
+
+    db.rules().insert(rule);
+    index();
+
+    assertThat(underTest.search(new RuleQuery().setQueryText("external_xoo:S001"), new SearchOptions()).getIds())
+      .containsExactlyInAnyOrder(rule.getId());
+  }
+
   @Test
   public void search_content_by_query() {
     RuleDefinitionDto rule1 = createJavaRule(rule -> rule.setRuleKey("123").setDescription("My great rule CWE-123 which makes your code 1000 times better!"));
@@ -367,7 +396,7 @@ public class RuleIndexTest {
 
     // find all
     RuleQuery query = new RuleQuery();
-    SearchIdResult<Integer>  results = underTest.search(query, new SearchOptions());
+    SearchIdResult<Integer> results = underTest.search(query, new SearchOptions());
     assertThat(results.getIds()).hasSize(2);
 
     // Only template
@@ -385,7 +414,7 @@ public class RuleIndexTest {
     results = underTest.search(query, new SearchOptions());
     assertThat(results.getIds()).containsOnly(ruleIsTemplate.getId(), ruleNoTemplate.getId());
   }
-  
+
   @Test
   public void search_by_is_external() {
     RuleDefinitionDto ruleIsNotExternal = createRule(setIsExternal(false));
@@ -398,17 +427,17 @@ public class RuleIndexTest {
     assertThat(results.getIds()).hasSize(2);
 
     // Only external
-    query = new RuleQuery().setIsExternal(true);
+    query = new RuleQuery().setIncludeExternal(true);
     results = underTest.search(query, new SearchOptions());
     assertThat(results.getIds()).containsOnly(ruleIsExternal.getId());
 
     // Only not external
-    query = new RuleQuery().setIsExternal(false);
+    query = new RuleQuery().setIncludeExternal(false);
     results = underTest.search(query, new SearchOptions());
     assertThat(results.getIds()).containsOnly(ruleIsNotExternal.getId());
 
     // null => no filter
-    query = new RuleQuery().setIsExternal(null);
+    query = new RuleQuery().setIncludeExternal(null);
     results = underTest.search(query, new SearchOptions());
     assertThat(results.getIds()).containsOnly(ruleIsExternal.getId(), ruleIsNotExternal.getId());
   }
index a07e81e4d42af279974ad8e51271f045fbc71fca..6ed6c4f5f4bdeeb0e1edba04408d7c56b488af8b 100644 (file)
@@ -57,7 +57,7 @@ import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVE_SEVERITIES
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_AVAILABLE_SINCE;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_COMPARE_TO_PROFILE;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INHERITANCE;
-import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_EXTERNAL;
+import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INCLUDE_EXTERNAL;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_TEMPLATE;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_LANGUAGES;
 import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ORGANIZATION;
@@ -101,7 +101,7 @@ public class RuleQueryFactoryTest {
     assertThat(result.isAscendingSort()).isTrue();
     assertThat(result.getAvailableSinceLong()).isNull();
     assertThat(result.getInheritance()).isNull();
-    assertThat(result.isExternal()).isNull();
+    assertThat(result.includeExternal()).isNull();
     assertThat(result.isTemplate()).isNull();
     assertThat(result.getLanguages()).isNull();
     assertThat(result.getQueryText()).isNull();
@@ -130,7 +130,7 @@ public class RuleQueryFactoryTest {
       PARAM_AVAILABLE_SINCE, "2016-01-01",
       PARAM_INHERITANCE, "INHERITED,OVERRIDES",
       PARAM_IS_TEMPLATE, "true",
-      PARAM_IS_EXTERNAL, "false",
+      PARAM_INCLUDE_EXTERNAL, "false",
       PARAM_LANGUAGES, "java,js",
       TEXT_QUERY, "S001",
       PARAM_ORGANIZATION, organization.getKey(),
@@ -147,17 +147,17 @@ public class RuleQueryFactoryTest {
       ASCENDING, "false");
 
     assertResult(result, qualityProfile, compareToQualityProfile);
-    assertThat(result.isExternal()).isFalse();
+    assertThat(result.includeExternal()).isFalse();
   }
 
   @Test
-  public void is_external_is_mandatory_for_rule_search_query() {
+  public void include_external_is_mandatory_for_rule_search_query() {
     dbTester.qualityProfiles().insert(organization);
     dbTester.qualityProfiles().insert(organization);
     Request request = new SimpleGetRequest();
 
     expectedException.expect(IllegalArgumentException.class);
-    expectedException.expectMessage("The 'is_external' parameter is missing");
+    expectedException.expectMessage("The 'include_external' parameter is missing");
     underTest.createRuleSearchQuery(dbTester.getSession(), request);
   }
 
@@ -174,7 +174,7 @@ public class RuleQueryFactoryTest {
       PARAM_AVAILABLE_SINCE, "2016-01-01",
       PARAM_INHERITANCE, "INHERITED,OVERRIDES",
       PARAM_IS_TEMPLATE, "true",
-      PARAM_IS_EXTERNAL, "true",
+      PARAM_INCLUDE_EXTERNAL, "true",
       PARAM_LANGUAGES, "java,js",
       TEXT_QUERY, "S001",
       PARAM_ORGANIZATION, organization.getKey(),
@@ -191,7 +191,7 @@ public class RuleQueryFactoryTest {
       ASCENDING, "false");
 
     assertResult(result, qualityProfile, compareToQualityProfile);
-    assertThat(result.isExternal()).isNull();
+    assertThat(result.includeExternal()).isNull();
   }
 
   private void assertResult(RuleQuery result, QProfileDto qualityProfile, QProfileDto compareToQualityProfile) {
index 298c5e136c18f560d82c489837da7fa46211142a..e1ada3def79e842a063ffeb2461b1865afff3e75 100644 (file)
@@ -143,7 +143,7 @@ public class RulesService extends BaseService {
         .setParam("facets", request.getFacets() == null ? null : request.getFacets().stream().collect(Collectors.joining(",")))
         .setParam("inheritance", request.getInheritance() == null ? null : request.getInheritance().stream().collect(Collectors.joining(",")))
         .setParam("is_template", request.getIsTemplate())
-        .setParam("is_external", request.getIsExternal())
+        .setParam("include_external", request.getIncludeExternal())
         .setParam("languages", request.getLanguages() == null ? null : request.getLanguages().stream().collect(Collectors.joining(",")))
         .setParam("organization", request.getOrganization())
         .setParam("p", request.getP())
index 38d9d4dac01c373b950f510489eba8f89faef00e..9ed5873ccfce65ee2ffc573d6af9b4c06cdda94f 100644 (file)
@@ -39,7 +39,7 @@ public class SearchRequest {
   private List<String> f;
   private List<String> facets;
   private List<String> inheritance;
-  private String isExternal;
+  private String includeExternal;
   private String isTemplate;
   private List<String> languages;
   private String organization;
@@ -248,13 +248,13 @@ public class SearchRequest {
    *   <li>"no"</li>
    * </ul>
    */
-  public SearchRequest setIsExternal(String isExternal) {
-    this.isExternal = isExternal;
+  public SearchRequest setIncludeExternal(String includeExternal) {
+    this.includeExternal = includeExternal;
     return this;
   }
 
-  public String getIsExternal() {
-    return isExternal;
+  public String getIncludeExternal() {
+    return includeExternal;
   }
 
   /**
index 4a1f4b91a7b139b7d9a0cff9c60036059d1f08d3..834f44ec1ffef2cddd6f391a5e66f5ab4e215ffe 100644 (file)
@@ -124,7 +124,7 @@ public class ExternalIssueTest {
     List<org.sonarqube.ws.Rules.Rule> rulesList = tester.wsClient().rules()
       .search(new org.sonarqube.ws.client.rules.SearchRequest()
         .setRuleKey(key)
-        .setIsExternal(Boolean.toString(true)))
+        .setIncludeExternal(Boolean.toString(true)))
       .getRulesList();
     assertThat(rulesList).isEmpty();
 
@@ -134,7 +134,7 @@ public class ExternalIssueTest {
     List<org.sonarqube.ws.Rules.Rule> rulesList = tester.wsClient().rules()
       .search(new org.sonarqube.ws.client.rules.SearchRequest()
         .setRuleKey(key)
-        .setIsExternal(Boolean.toString(true)))
+        .setIncludeExternal(Boolean.toString(true)))
       .getRulesList();
 
     assertThat(rulesList).hasSize(1);