aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueDoc.java25
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueNormalizer.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java7
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssuesWsMediumTest.java19
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/issue/ws/IssuesWsMediumTest/single_result.json19
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/issue/Issue.java12
6 files changed, 64 insertions, 20 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueDoc.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueDoc.java
index 7bd9a77cb05..f9b0569eb9a 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueDoc.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueDoc.java
@@ -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());
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueNormalizer.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueNormalizer.java
index 30f7368c168..76284ca648c 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueNormalizer.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueNormalizer.java
@@ -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());
diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java
index 1a34f8f9c78..66c0e7aed5d 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java
@@ -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()));
diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssuesWsMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssuesWsMediumTest.java
index 089dadefb5f..35031607fee 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssuesWsMediumTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssuesWsMediumTest.java
@@ -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
index 00000000000..c7be54490fd
--- /dev/null
+++ b/server/sonar-server/src/test/resources/org/sonar/server/issue/ws/IssuesWsMediumTest/single_result.json
@@ -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": []}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/issue/Issue.java b/sonar-plugin-api/src/main/java/org/sonar/api/issue/Issue.java
index 01fb13b1f5a..b3907d233de 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/issue/Issue.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/issue/Issue.java
@@ -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();
}