]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5531 - First search test case of Issues in ES
authorStephane Gamard <stephane.gamard@sonarsource.com>
Fri, 5 Sep 2014 07:42:39 +0000 (09:42 +0200)
committerStephane Gamard <stephane.gamard@sonarsource.com>
Fri, 5 Sep 2014 07:43:03 +0000 (09:43 +0200)
server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueDoc.java
server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueNormalizer.java
server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java
server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssuesWsMediumTest.java
server/sonar-server/src/test/resources/org/sonar/server/issue/ws/IssuesWsMediumTest/single_result.json [new file with mode: 0644]
sonar-plugin-api/src/main/java/org/sonar/api/issue/Issue.java

index 7bd9a77cb0525fb0c6494737e895555223b06b64..f9b0569eb9a372fc444b73b2249fae86411a9cb6 100644 (file)
@@ -22,11 +22,12 @@ package org.sonar.server.issue.index;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.IssueComment;
 import org.sonar.api.rule.RuleKey;
+import org.sonar.api.utils.Duration;
 import org.sonar.server.search.BaseDoc;
 import org.sonar.server.search.IndexUtils;
 
 import javax.annotation.CheckForNull;
-
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -121,12 +122,14 @@ public class IssueDoc extends BaseDoc implements Issue {
   @Override
   @CheckForNull
   public String attribute(String key) {
+    // TODO get the actual value
     return null;
   }
 
   @Override
   public Map<String, String> attributes() {
-    return null;
+    // TODO get the actual value
+    return Collections.emptyMap();
   }
 
   @Override
@@ -143,11 +146,25 @@ public class IssueDoc extends BaseDoc implements Issue {
 
   @Override
   public List<IssueComment> comments() {
-    return null;
+    // TODO get the actual value
+    return Collections.emptyList();
   }
 
   @Override
   public boolean isNew() {
-    return false;
+    throw new IllegalStateException("Only available for batch");
+  }
+
+  @Override
+  @CheckForNull
+  public Duration debt() {
+    // TODO check long cast ?!?!?!?
+    Long debt = new Long((Integer) getNullableField(IssueNormalizer.IssueField.DEBT.field()));
+    return (debt != null) ? Duration.create(debt) : null;
+  }
+
+  @Override
+  public String projectKey() {
+    return getField(IssueNormalizer.IssueField.PROJECT.field());
   }
 }
index 30f7368c168f57e1d82690129452e77ba6bee54a..76284ca648ce23f63fd5d7d068f476273bb5916c 100644 (file)
@@ -43,6 +43,7 @@ public class IssueNormalizer extends BaseNormalizer<IssueDto, String> {
     public static final IndexField CREATED_AT = add(IndexField.Type.DATE, "createdAt");
     public static final IndexField UPDATED_AT = add(IndexField.Type.DATE, "updatedAt");
 
+    public static final IndexField DEBT = add(IndexField.Type.NUMERIC, "debt");
     public static final IndexField ACTION_PLAN = add(IndexField.Type.STRING, "actionPlan");
     public static final IndexField ASSIGNEE = add(IndexField.Type.STRING, "assignee");
     public static final IndexField AUTHOR_LOGIN = add(IndexField.Type.STRING, "authorLogin");
@@ -112,6 +113,7 @@ public class IssueNormalizer extends BaseNormalizer<IssueDto, String> {
     update.put(IssueField.REPORTER.field(), dto.getReporter());
     update.put(IssueField.STATUS.field(), dto.getStatus());
     update.put(IssueField.SEVERITY.field(), dto.getSeverity());
+    update.put(IssueField.DEBT.field(), dto.getDebt());
 
     // issueDoc.ruleKey();
     update.put(IssueField.RULE.field(), dto.getRule());
index 1a34f8f9c7839529423e7b48e786c78213c2441a..66c0e7aed5d6f968178d2d52b206bbfda08bac26 100644 (file)
@@ -31,7 +31,6 @@ import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.IssueComment;
 import org.sonar.api.issue.IssueQuery;
 import org.sonar.api.issue.IssueQueryResult;
-import org.sonar.api.issue.internal.DefaultIssue;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.Severity;
 import org.sonar.api.rules.Rule;
@@ -227,6 +226,7 @@ public class SearchAction implements RequestHandler {
       .prop("pageIndex", result.paging().pageIndex())
       .prop("pageSize", result.paging().pageSize())
       .prop("total", result.paging().total())
+      // TODO Remove as part of Front-end rework on Issue Domain
       .prop("fTotal", i18n.formatInteger(UserSession.get().locale(), result.paging().total()))
       .prop("pages", result.paging().pages())
       .endObject();
@@ -235,10 +235,9 @@ public class SearchAction implements RequestHandler {
   private void writeIssues(IssueQueryResult result, @Nullable List<String> extraFields, JsonWriter json) {
     json.name("issues").beginArray();
 
-    for (Issue i : result.issues()) {
+    for (Issue issue : result.issues()) {
       json.beginObject();
 
-      DefaultIssue issue = (DefaultIssue) i;
       String actionPlanKey = issue.actionPlanKey();
       Duration debt = issue.debt();
       Date updateDate = issue.updateDate();
@@ -246,7 +245,6 @@ public class SearchAction implements RequestHandler {
       json
         .prop("key", issue.key())
         .prop("component", issue.componentKey())
-        .prop("componentId", issue.componentId())
         .prop("project", issue.projectKey())
         .prop("rule", issue.ruleKey().toString())
         .prop("status", issue.status())
@@ -261,6 +259,7 @@ public class SearchAction implements RequestHandler {
         .prop("actionPlan", actionPlanKey)
         .prop("creationDate", isoDate(issue.creationDate()))
         .prop("updateDate", isoDate(updateDate))
+        // TODO Remove as part of Front-end rework on Issue Domain
         .prop("fUpdateAge", formatAgeDate(updateDate))
         .prop("closeDate", isoDate(issue.closeDate()));
 
index 089dadefb5fcb225aa2b53e0b5e8617e14e6648d..35031607fee6703b9110a8a34723b7102897f58c 100644 (file)
@@ -22,9 +22,9 @@ package org.sonar.server.issue.ws;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.sonar.api.server.ws.WebService;
+import org.sonar.api.utils.DateUtils;
 import org.sonar.core.component.ComponentDto;
 import org.sonar.core.issue.db.IssueDto;
 import org.sonar.core.permission.GlobalPermissions;
@@ -38,9 +38,6 @@ import org.sonar.server.tester.ServerTester;
 import org.sonar.server.user.MockUserSession;
 import org.sonar.server.ws.WsTester;
 
-import java.util.Date;
-import java.util.UUID;
-
 import static org.fest.assertions.Assertions.assertThat;
 
 public class IssuesWsMediumTest {
@@ -61,7 +58,6 @@ public class IssuesWsMediumTest {
     wsTester = tester.get(WsTester.class);
     session = db.openSession(false);
     MockUserSession.set().setLogin("gandalf").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN);
-
   }
 
   @After
@@ -108,7 +104,6 @@ public class IssuesWsMediumTest {
   }
 
   @Test
-  @Ignore("Work in progress")
   public void find_single_result() throws Exception {
 
     RuleDto rule = RuleTesting.newXooX1();
@@ -127,13 +122,14 @@ public class IssuesWsMediumTest {
     tester.get(ComponentDao.class).insert(session, resource);
 
     IssueDto issue = new IssueDto()
-      .setIssueCreationDate(new Date())
-      .setIssueUpdateDate(new Date())
+      .setIssueCreationDate(DateUtils.parseDate("2014-09-04"))
+      .setIssueUpdateDate(DateUtils.parseDate("2014-12-04"))
       .setRule(rule)
+      .setDebt(10L)
       .setRootComponent(project)
       .setComponent(resource)
       .setStatus("OPEN").setResolution("OPEN")
-      .setKee(UUID.randomUUID().toString())
+      .setKee("82fd47d4-b650-4037-80bc-7b112bd4eac2")
       .setSeverity("MAJOR");
     db.issueDao().insert(session, issue);
 
@@ -144,8 +140,7 @@ public class IssuesWsMediumTest {
     WsTester.Result result = request.execute();
 
     assertThat(result).isNotNull();
-    System.out.println("result.outputAsString() = " + result.outputAsString());
-    result.assertJson(this.getClass(), "empty_result.json", false);
+    // TODO Date assertion is complex du to System2
+    result.assertJson(this.getClass(), "single_result.json", false);
   }
-
 }
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/issue/ws/IssuesWsMediumTest/single_result.json b/server/sonar-server/src/test/resources/org/sonar/server/issue/ws/IssuesWsMediumTest/single_result.json
new file mode 100644 (file)
index 0000000..c7be544
--- /dev/null
@@ -0,0 +1,19 @@
+{"maxResultsReached": false, "paging": {
+  "pageIndex": 1,
+  "pageSize": 10,
+  "total": 1,
+  "fTotal": "1",
+  "pages": 1
+}, "issues": [
+  {
+    "key": "82fd47d4-b650-4037-80bc-7b112bd4eac2",
+    "component": "MyComponent",
+    "project": "MyProject",
+    "rule": "xoo:x1",
+    "status": "OPEN",
+    "resolution": "OPEN",
+    "severity": "MAJOR",
+    "debt": "10min",
+    "fUpdateAge": "less than a minute"
+  }
+], "components": [], "projects": [], "rules": [], "users": []}
index 01fb13b1f5a4b6b178a3bb3d582319622c4619e6..b3907d233def83bb183db4d9e00c08aa56baca24 100644 (file)
@@ -21,6 +21,7 @@ package org.sonar.api.issue;
 
 import com.google.common.collect.ImmutableList;
 import org.sonar.api.rule.RuleKey;
+import org.sonar.api.utils.Duration;
 
 import javax.annotation.CheckForNull;
 
@@ -171,4 +172,15 @@ public interface Issue extends Serializable {
    * @since 4.0
    */
   boolean isNew();
+
+  /**
+   * @since 5.0
+   */
+  @CheckForNull
+  Duration debt();
+
+  /**
+   * @since 5.0
+   */
+  String projectKey();
 }