]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5174 Rules WS search by language and characteristic
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 28 Mar 2014 10:19:26 +0000 (11:19 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 28 Mar 2014 10:19:38 +0000 (11:19 +0100)
sonar-server/src/main/java/org/sonar/server/rule/RuleQuery.java
sonar-server/src/main/java/org/sonar/server/rule/ws/RuleSearchWsHandler.java
sonar-server/src/test/java/org/sonar/server/rule/ws/RuleSearchWsHandlerTest.java

index 8635d85fcbf2f1c28da863a5044b9fb28f81dda3..c6fa805af38c5c2097296be22579a57c0bb80898 100644 (file)
@@ -111,7 +111,7 @@ public class RuleQuery {
       return this;
     }
 
-    public Builder language(String language) {
+    public Builder language(@Nullable String language) {
       this.language = language;
       return this;
     }
index 3a29c68aeed9da9a4a8098f65a3a843aa0d4c0ef..0fc33b2b4a3ddba6c3e070f4b28bcd27f6e1c91b 100644 (file)
@@ -54,14 +54,13 @@ public class RuleSearchWsHandler implements RequestHandler {
     boolean hasMore = false;
     long total = 0L;
     if (ruleKeyParam == null) {
-      final String ruleSearchParam = request.param("s");
-      final int pageSize = request.paramAsInt("ps", 25);
-      final int pageIndex = request.paramAsInt("p", 1);
       PagedResult<Rule> searchResult = rules.find(RuleQuery.builder()
-          .searchQuery(ruleSearchParam)
-          .pageSize(pageSize)
-          .pageIndex(pageIndex)
-          .build());
+        .searchQuery(request.param("s"))
+        .language(request.param("language"))
+        .characteristic(request.param("characteristic"))
+        .pageSize(request.paramAsInt("ps"))
+        .pageIndex(request.paramAsInt("p"))
+        .build());
       foundRules = searchResult.results();
       hasMore = searchResult.paging().hasNextPage();
       total = searchResult.paging().total();
@@ -77,7 +76,7 @@ public class RuleSearchWsHandler implements RequestHandler {
 
     JsonWriter json = response.newJsonWriter();
     json.beginObject().name("results").beginArray();
-    for(Rule rule: foundRules) {
+    for (Rule rule : foundRules) {
       json.beginObject();
       writeRule(rule, json);
       json.endObject();
index 61ee99abfab7f6deeeceeb0fa7d8c0202e6098ee..1782b12bed799064f3f6aee888439b0ffad9e702 100644 (file)
@@ -24,11 +24,14 @@ import com.google.common.collect.ImmutableList;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.sonar.api.resources.Language;
 import org.sonar.api.resources.Languages;
 import org.sonar.api.rule.RuleKey;
+import org.sonar.api.server.debt.DebtRemediationFunction;
+import org.sonar.api.server.debt.internal.DefaultDebtRemediationFunction;
 import org.sonar.api.server.ws.WsTester;
 import org.sonar.server.paging.PagedResult;
 import org.sonar.server.paging.PagingResult;
@@ -37,9 +40,9 @@ import org.sonar.server.rule.RuleQuery;
 import org.sonar.server.rule.Rules;
 import org.sonar.server.user.MockUserSession;
 
+import static org.fest.assertions.Assertions.assertThat;
 import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.*;
 
 @RunWith(MockitoJUnitRunner.class)
 public class RuleSearchWsHandlerTest {
@@ -55,7 +58,12 @@ public class RuleSearchWsHandlerTest {
     .setRepositoryKey("squid")
     .setName("Avoid cycle")
     .setDescription("Avoid cycle between packages")
-    .setLanguage("java");
+    .setLanguage("java")
+    .setDebtCharacteristicKey("REUSABILITY")
+    .setDebtCharacteristicName("Reusability")
+    .setDebtCharacteristicKey("MODULARITY")
+    .setDebtCharacteristicKey("Modularity")
+    .setDebtRemediationFunction(new DefaultDebtRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET, "1h", "15min"));
 
   WsTester tester;
 
@@ -99,4 +107,42 @@ public class RuleSearchWsHandlerTest {
       + "{'key':'squid:AvoidCycle','name':'Avoid cycle','language':'Java'}"
       + "]}");
   }
+
+  @Test
+  public void search_rule_by_language() throws Exception {
+    Rule rule = ruleBuilder.build();
+
+    when(rules.find(any(RuleQuery.class))).thenReturn(
+      new PagedResult<Rule>(ImmutableList.of(rule), PagingResult.create(10, 1, 1)));
+
+    MockUserSession.set();
+    WsTester.TestRequest request = tester.newRequest("list").setParam("language", "java");
+    request.execute().assertJson("{'more':false,'total':1,'results':["
+      + "{'key':'squid:AvoidCycle','name':'Avoid cycle','language':'java'}"
+      + "]}");
+
+    ArgumentCaptor<RuleQuery> ruleQueryCaptor = ArgumentCaptor.forClass(RuleQuery.class);
+    verify(rules).find(ruleQueryCaptor.capture());
+
+    assertThat(ruleQueryCaptor.getValue().language()).isEqualTo("java");
+  }
+
+  @Test
+  public void search_rule_by_characteristic() throws Exception {
+    Rule rule = ruleBuilder.build();
+
+    when(rules.find(any(RuleQuery.class))).thenReturn(
+      new PagedResult<Rule>(ImmutableList.of(rule), PagingResult.create(10, 1, 1)));
+
+    MockUserSession.set();
+    WsTester.TestRequest request = tester.newRequest("list").setParam("characteristic", "MODULARITY");
+    request.execute().assertJson("{'more':false,'total':1,'results':["
+      + "{'key':'squid:AvoidCycle','name':'Avoid cycle','language':'java'}"
+      + "]}");
+
+    ArgumentCaptor<RuleQuery> ruleQueryCaptor = ArgumentCaptor.forClass(RuleQuery.class);
+    verify(rules).find(ruleQueryCaptor.capture());
+
+    assertThat(ruleQueryCaptor.getValue().characteristic()).isEqualTo("MODULARITY");
+  }
 }