]> source.dussan.org Git - sonarqube.git/commitdiff
IssueShowWS : Add technical debt
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Wed, 22 Jan 2014 16:43:32 +0000 (17:43 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Wed, 22 Jan 2014 16:43:32 +0000 (17:43 +0100)
sonar-server/src/main/java/org/sonar/server/issue/ws/IssueShowWsHandler.java
sonar-server/src/test/java/org/sonar/server/issue/ws/IssueShowWsHandlerTest.java
sonar-server/src/test/resources/org/sonar/server/issue/ws/IssueShowWsHandlerTest/show_issue_with_technical_debt.json [new file with mode: 0644]

index e126158d2669dc3738b36b95dc3d823a9dcd6321..772d018adacd582059b2d12d741827cb78d7c235 100644 (file)
@@ -22,6 +22,7 @@ package org.sonar.server.issue.ws;
 import org.sonar.api.issue.*;
 import org.sonar.api.issue.action.Action;
 import org.sonar.api.issue.internal.DefaultIssue;
+import org.sonar.api.issue.internal.WorkDayDuration;
 import org.sonar.api.server.ws.Request;
 import org.sonar.api.server.ws.RequestHandler;
 import org.sonar.api.server.ws.Response;
@@ -30,6 +31,7 @@ import org.sonar.core.issue.workflow.Transition;
 import org.sonar.server.exceptions.NotFoundException;
 import org.sonar.server.issue.ActionService;
 import org.sonar.server.issue.IssueService;
+import org.sonar.server.technicaldebt.InternalRubyTechnicalDebtService;
 import org.sonar.server.user.UserSession;
 
 import java.util.Arrays;
@@ -42,11 +44,13 @@ public class IssueShowWsHandler implements RequestHandler {
   private final IssueFinder issueFinder;
   private final IssueService issueService;
   private final ActionService actionService;
+  private final InternalRubyTechnicalDebtService technicalDebtService;
 
-  public IssueShowWsHandler(IssueFinder issueFinder, IssueService issueService, ActionService actionService) {
+  public IssueShowWsHandler(IssueFinder issueFinder, IssueService issueService, ActionService actionService, InternalRubyTechnicalDebtService technicalDebtService) {
     this.issueFinder = issueFinder;
     this.issueService = issueService;
     this.actionService = actionService;
+    this.technicalDebtService = technicalDebtService;
   }
 
   @Override
@@ -71,14 +75,16 @@ public class IssueShowWsHandler implements RequestHandler {
   }
 
   private void writeIssue(IssueQueryResult result, DefaultIssue issue, JsonWriter json) {
+    WorkDayDuration technicalDebt = issue.technicalDebt();
+    String techDebtLabel = technicalDebt != null ? technicalDebtService.format(technicalDebt) : null;
+
     json
       .prop("key", issue.key())
       .prop("component", issue.componentKey())
       .prop("project", result.project(issue).key())
       .prop("rule", issue.ruleKey().toString())
       .prop("line", issue.line())
-        // TODO
-//      .prop("technicalDebt", effortToFix)
+      .prop("technicalDebt", techDebtLabel)
       .prop("message", issue.message())
       .prop("resolution", issue.resolution())
       .prop("status", issue.status())
@@ -136,6 +142,7 @@ public class IssueShowWsHandler implements RequestHandler {
         .prop("userLogin", userLogin)
         .prop("userName", userLogin != null ? queryResult.user(userLogin).name() : null)
           // TODO convert markdown to HTML
+          // TODO add date
         .endObject();
     }
     json.endArray();
index b96af1909fbee55def16bf439e5236086d0a6e88..ac0c5d1a14c393c195965493762b6a011c6b8156 100644 (file)
@@ -32,6 +32,7 @@ import org.sonar.api.issue.IssueQuery;
 import org.sonar.api.issue.action.Action;
 import org.sonar.api.issue.internal.DefaultIssue;
 import org.sonar.api.issue.internal.DefaultIssueComment;
+import org.sonar.api.issue.internal.WorkDayDuration;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.server.ws.SimpleRequest;
 import org.sonar.api.user.User;
@@ -40,6 +41,7 @@ import org.sonar.core.issue.workflow.Transition;
 import org.sonar.core.user.DefaultUser;
 import org.sonar.server.issue.ActionService;
 import org.sonar.server.issue.IssueService;
+import org.sonar.server.technicaldebt.InternalRubyTechnicalDebtService;
 import org.sonar.server.user.MockUserSession;
 import org.sonar.server.user.UserSession;
 import org.sonar.server.ws.WsTester;
@@ -65,6 +67,9 @@ public class IssueShowWsHandlerTest {
   @Mock
   ActionService actionService;
 
+  @Mock
+  InternalRubyTechnicalDebtService technicalDebtService;
+
   List<Issue> issues;
   DefaultIssueQueryResult result;
 
@@ -79,7 +84,7 @@ public class IssueShowWsHandlerTest {
     result.addProjects(newArrayList(component));
     when(issueFinder.find(any(IssueQuery.class))).thenReturn(result);
 
-    tester = new WsTester(new IssuesWs(new IssueShowWsHandler(issueFinder, issueService, actionService)));
+    tester = new WsTester(new IssuesWs(new IssueShowWsHandler(issueFinder, issueService, actionService, technicalDebtService)));
   }
 
   @Test
@@ -114,6 +119,25 @@ public class IssueShowWsHandlerTest {
     tester.execute("show", request).assertJson(getClass(), "show_issue.json");
   }
 
+  @Test
+  public void show_issue_with_technical_debt() throws Exception {
+    String issueKey = "ABCD";
+    WorkDayDuration technicalDebt = WorkDayDuration.of(1, 2, 0);
+    Issue issue = new DefaultIssue()
+      .setKey(issueKey)
+      .setComponentKey("org.sonar.server.issue.IssueClient")
+      .setProjectKey("org.sonar.Sonar")
+      .setRuleKey(RuleKey.of("squid", "AvoidCycle"))
+      .setTechnicalDebt(technicalDebt);
+    issues.add(issue);
+
+    when(technicalDebtService.format(technicalDebt)).thenReturn("2 hours 1 minutes");
+
+    MockUserSession.set();
+    SimpleRequest request = new SimpleRequest().setParam("key", issueKey);
+    tester.execute("show", request).assertJson(getClass(), "show_issue_with_technical_debt.json");
+  }
+
   @Test
   public void show_issue_with_comments() throws Exception {
     String issueKey = "ABCD";
diff --git a/sonar-server/src/test/resources/org/sonar/server/issue/ws/IssueShowWsHandlerTest/show_issue_with_technical_debt.json b/sonar-server/src/test/resources/org/sonar/server/issue/ws/IssueShowWsHandlerTest/show_issue_with_technical_debt.json
new file mode 100644 (file)
index 0000000..0746dcf
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "issue": {
+    "key": "ABCD",
+    "component": "org.sonar.server.issue.IssueClient",
+    "project": "org.sonar.Sonar",
+    "rule": "squid:AvoidCycle",
+    "technicalDebt": "2 hours 1 minutes",
+    "transitions": [],
+    "actions": [],
+    "comments": []
+  }
+}