From 94c01cfe7d28a33eee46f052a1c3c9d9f68e8e3f Mon Sep 17 00:00:00 2001 From: Stephane Gamard Date: Fri, 5 Sep 2014 09:42:39 +0200 Subject: [PATCH] SONAR-5531 - First search test case of Issues in ES --- .../sonar/server/issue/index/IssueDoc.java | 25 ++++++++++++++++--- .../server/issue/index/IssueNormalizer.java | 2 ++ .../sonar/server/issue/ws/SearchAction.java | 7 +++--- .../server/issue/ws/IssuesWsMediumTest.java | 19 ++++++-------- .../ws/IssuesWsMediumTest/single_result.json | 19 ++++++++++++++ .../main/java/org/sonar/api/issue/Issue.java | 12 +++++++++ 6 files changed, 64 insertions(+), 20 deletions(-) create mode 100644 server/sonar-server/src/test/resources/org/sonar/server/issue/ws/IssuesWsMediumTest/single_result.json 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 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 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 { 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 { 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 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(); } -- 2.39.5