]> source.dussan.org Git - sonarqube.git/commitdiff
Fix broken JSon in RuleWS for search
authorStephane Gamard <stephane.gamard@searchbox.com>
Fri, 9 May 2014 12:46:31 +0000 (14:46 +0200)
committerStephane Gamard <stephane.gamard@searchbox.com>
Fri, 9 May 2014 14:10:31 +0000 (16:10 +0200)
sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java
sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java

index 14365863fc7be421786e6123e3224a146a4a990e..96aa41bb53994b8a3778948a978836800fe2e26b 100644 (file)
@@ -188,9 +188,11 @@ public class SearchAction implements RequestHandler {
       request.mandatoryParamAsInt(PARAM_PAGE_SIZE));
 
     Result<Rule> results = service.search(query, options);
+
     JsonWriter json = response.newJsonWriter().beginObject();
     writeStatistics(results, json);
     writeRules(results, json);
+    json.endObject();
     json.close();
   }
 
@@ -199,7 +201,10 @@ public class SearchAction implements RequestHandler {
   }
 
   private void writeRules(Result<Rule> result, JsonWriter json) {
+    json.name("rules").beginArray();
+
     for(Rule rule:result.getHits()) {
+      json.beginObject();
       json
         .prop("repo", rule.key().repository())
         .prop("key", rule.key().rule())
@@ -222,7 +227,9 @@ public class SearchAction implements RequestHandler {
           .endObject();
       }
       json.endArray();
+      json.endObject();
     }
+    json.endArray();
   }
 
   @CheckForNull
index ba49725d67e884bfd88cf8e465ed599535f5ddd4..82e499672588b3d2e3b5b799d78d55bd6b227720 100644 (file)
  */
 package org.sonar.server.rule2.ws;
 
+import org.junit.Before;
+import org.junit.ClassRule;
 import org.junit.Test;
+import org.sonar.api.rule.RuleKey;
+import org.sonar.api.rule.RuleStatus;
+import org.sonar.api.rule.Severity;
 import org.sonar.api.server.ws.WebService;
+import org.sonar.api.utils.DateUtils;
+import org.sonar.check.Cardinality;
+import org.sonar.core.persistence.DbSession;
+import org.sonar.core.persistence.MyBatis;
+import org.sonar.core.rule.RuleDto;
+import org.sonar.server.rule2.RuleDao;
 import org.sonar.server.rule2.RuleService;
+import org.sonar.server.tester.ServerTester;
+import org.sonar.server.user.MockUserSession;
+import org.sonar.server.ws.WsTester;
 
 import static org.fest.assertions.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
 
 public class RulesWebServiceTest {
 
+  @ClassRule
+  public static ServerTester tester = new ServerTester();
+
+
+  private RulesWebService ws;
+  private RuleDao ruleDao;
+
+  WsTester wsTester;
+
+  @Before
+  public void setUp() throws Exception {
+    ruleDao = tester.get(RuleDao.class);
+    ws = tester.get(RulesWebService.class);
+    wsTester = new WsTester(ws);
+
+  }
+
   @Test
   public void define() throws Exception {
-    RuleService service = mock(RuleService.class);
-    SearchAction search = new SearchAction(service);
-    ShowAction show = new ShowAction(service);
-    TagsAction tags = new TagsAction(service);
-    RulesWebService ws = new RulesWebService(search, show, tags);
 
     WebService.Context context = new WebService.Context();
     ws.define(context);
 
     WebService.Controller controller = context.controller("api/rules2");
+
     assertThat(controller).isNotNull();
     assertThat(controller.actions()).hasSize(3);
     assertThat(controller.action("search")).isNotNull();
     assertThat(controller.action("show")).isNotNull();
     assertThat(controller.action("tags")).isNotNull();
   }
+
+  @Test
+  public void search_no_rules() throws Exception {
+
+    MockUserSession.set();
+    WsTester.TestRequest request = wsTester.newGetRequest("api/rules2", "search");
+    System.out.println("request.toString() = " + request.toString());
+
+    WsTester.Result result = request.execute();
+    assertThat(result.outputAsString()).isEqualTo("{\"total\":0,\"rules\":[]}");
+  }
+
+  @Test
+  public void search_2_rules() throws Exception {
+
+    DbSession session = tester.get(MyBatis.class).openSession(false);
+    ruleDao.insert(newRuleDto(RuleKey.of("javascript", "S001")), session);
+    ruleDao.insert(newRuleDto(RuleKey.of("javascript", "S002")), session);
+    session.commit();
+    session.close();
+    tester.get(RuleService.class).refresh();
+
+    MockUserSession.set();
+    WsTester.TestRequest request = wsTester.newGetRequest("api/rules2", "search");
+    System.out.println("request.toString() = " + request.toString());
+
+    WsTester.Result result = request.execute();
+    System.out.println("result.outputAsString() = " + result.outputAsString());
+  }
+
+
+  private RuleDto newRuleDto(RuleKey ruleKey) {
+    return new RuleDto()
+      .setRuleKey(ruleKey.rule())
+      .setRepositoryKey(ruleKey.repository())
+      .setName("Rule " + ruleKey.rule())
+      .setDescription("Description " + ruleKey.rule())
+      .setStatus(RuleStatus.READY.toString())
+      .setConfigKey("InternalKey" + ruleKey.rule())
+      .setSeverity(Severity.INFO)
+      .setCardinality(Cardinality.SINGLE)
+      .setLanguage("js")
+      .setRemediationFunction("linear")
+      .setDefaultRemediationFunction("linear_offset")
+      .setRemediationCoefficient("1h")
+      .setDefaultRemediationCoefficient("5d")
+      .setRemediationOffset("5min")
+      .setDefaultRemediationOffset("10h")
+      .setEffortToFixDescription(ruleKey.repository() + "." + ruleKey.rule() + ".effortToFix")
+      .setCreatedAt(DateUtils.parseDate("2013-12-16"))
+      .setUpdatedAt(DateUtils.parseDate("2013-12-17"));
+  }
 }
+
+