From 4611c4b0caee20400c1cd37b3526e3cee0f99d82 Mon Sep 17 00:00:00 2001 From: Stephane Gamard Date: Fri, 9 May 2014 14:46:31 +0200 Subject: [PATCH] Fix broken JSon in RuleWS for search --- .../sonar/server/rule2/ws/SearchAction.java | 7 ++ .../server/rule2/ws/RulesWebServiceTest.java | 92 +++++++++++++++++-- 2 files changed, 93 insertions(+), 6 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java b/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java index 14365863fc7..96aa41bb539 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java @@ -188,9 +188,11 @@ public class SearchAction implements RequestHandler { request.mandatoryParamAsInt(PARAM_PAGE_SIZE)); Result 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 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 diff --git a/sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java b/sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java index ba49725d67e..82e49967258 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java @@ -19,31 +19,111 @@ */ 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")); + } } + + -- 2.39.5