From d1d86087723954a671e9e8bfa8aa2d98e0f9c9f8 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Thu, 2 Oct 2014 11:30:27 +0200 Subject: [PATCH] SONAR-5658 Add a new field to index severities ordinal Conflicts: server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueNormalizer.java --- .../sonar/server/issue/index/IssueIndex.java | 2 + .../server/issue/index/IssueNormalizer.java | 3 ++ .../issue/index/IssueIndexMediumTest.java | 54 ++++++++++++++----- 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java index 33e60a89981..9e5abe2a994 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java @@ -294,6 +294,8 @@ public class IssueIndex extends BaseIndex { private IndexField toIndexField(String sort) { if (IssueQuery.SORT_BY_ASSIGNEE.equals(sort)) { return IssueNormalizer.IssueField.ASSIGNEE; + } else if (IssueQuery.SORT_BY_SEVERITY.equals(sort)) { + return IssueNormalizer.IssueField.SEVERITY_VALUE; } else if (IssueQuery.SORT_BY_CREATION_DATE.equals(sort)) { return IssueNormalizer.IssueField.ISSUE_CREATED_AT; } else if (IssueQuery.SORT_BY_UPDATE_DATE.equals(sort)) { 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 cba659090b4..531b8503264 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 @@ -21,6 +21,7 @@ package org.sonar.server.issue.index; import com.google.common.collect.ImmutableList; import org.elasticsearch.action.update.UpdateRequest; +import org.sonar.api.rule.Severity; import org.sonar.core.issue.db.IssueDto; import org.sonar.server.db.DbClient; import org.sonar.server.search.BaseNormalizer; @@ -65,6 +66,7 @@ public class IssueNormalizer extends BaseNormalizer { public static final IndexField REPORTER = add(IndexField.Type.STRING, "reporter"); public static final IndexField STATUS = addSortable(IndexField.Type.STRING, "status"); public static final IndexField SEVERITY = add(IndexField.Type.STRING, "severity"); + public static final IndexField SEVERITY_VALUE = addSortable(IndexField.Type.NUMERIC, "severityValue"); public static final IndexField LANGUAGE = add(IndexField.Type.STRING, "language"); public static final IndexField RULE_KEY = add(IndexField.Type.STRING, "ruleKey"); @@ -119,6 +121,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.SEVERITY_VALUE.field(), Severity.ALL.indexOf(dto.getSeverity())); update.put(IssueField.DEBT.field(), dto.getDebt()); update.put(IssueField.LANGUAGE.field(), dto.getLanguage()); update.put(IssueField.RULE_KEY.field(), dto.getRuleKey().toString()); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexMediumTest.java index 823f7ae17f8..95b88a59bdf 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexMediumTest.java @@ -407,11 +407,39 @@ public class IssueIndexMediumTest { assertThat(result.getHits()).hasSize(500); } + @Test + public void sort_by_severity() throws Exception { + db.issueDao().insert(session, + IssueTesting.newDto(rule, file, project).setSeverity(Severity.BLOCKER), + IssueTesting.newDto(rule, file, project).setSeverity(Severity.INFO), + IssueTesting.newDto(rule, file, project).setSeverity(Severity.MINOR), + IssueTesting.newDto(rule, file, project).setSeverity(Severity.CRITICAL), + IssueTesting.newDto(rule, file, project).setSeverity(Severity.MAJOR) + ); + session.commit(); + + IssueQuery.Builder query = IssueQuery.builder().sort(IssueQuery.SORT_BY_SEVERITY).asc(true); + Result result = index.search(query.build(), new QueryContext()); + assertThat(result.getHits().get(0).severity()).isEqualTo(Severity.INFO); + assertThat(result.getHits().get(1).severity()).isEqualTo(Severity.MINOR); + assertThat(result.getHits().get(2).severity()).isEqualTo(Severity.MAJOR); + assertThat(result.getHits().get(3).severity()).isEqualTo(Severity.CRITICAL); + assertThat(result.getHits().get(4).severity()).isEqualTo(Severity.BLOCKER); + + query = IssueQuery.builder().sort(IssueQuery.SORT_BY_SEVERITY).asc(false); + result = index.search(query.build(), new QueryContext()); + assertThat(result.getHits().get(0).severity()).isEqualTo(Severity.BLOCKER); + assertThat(result.getHits().get(1).severity()).isEqualTo(Severity.CRITICAL); + assertThat(result.getHits().get(2).severity()).isEqualTo(Severity.MAJOR); + assertThat(result.getHits().get(3).severity()).isEqualTo(Severity.MINOR); + assertThat(result.getHits().get(4).severity()).isEqualTo(Severity.INFO); + } + @Test public void sort_by_assignee() throws Exception { - IssueDto issue1 = IssueTesting.newDto(rule, file, project).setAssignee("steph"); - IssueDto issue2 = IssueTesting.newDto(rule, file, project).setAssignee("simon"); - db.issueDao().insert(session, issue1, issue2); + db.issueDao().insert(session, + IssueTesting.newDto(rule, file, project).setAssignee("steph"), + IssueTesting.newDto(rule, file, project).setAssignee("simon")); session.commit(); IssueQuery.Builder query = IssueQuery.builder().sort(IssueQuery.SORT_BY_ASSIGNEE).asc(true); @@ -429,9 +457,9 @@ public class IssueIndexMediumTest { @Test public void sort_by_creation_date() throws Exception { - IssueDto issue1 = IssueTesting.newDto(rule, file, project).setIssueCreationDate(DateUtils.parseDate("2014-09-23")); - IssueDto issue2 = IssueTesting.newDto(rule, file, project).setIssueCreationDate(DateUtils.parseDate("2014-09-24")); - db.issueDao().insert(session, issue1, issue2); + db.issueDao().insert(session, + IssueTesting.newDto(rule, file, project).setIssueCreationDate(DateUtils.parseDate("2014-09-23")), + IssueTesting.newDto(rule, file, project).setIssueCreationDate(DateUtils.parseDate("2014-09-24"))); session.commit(); IssueQuery.Builder query = IssueQuery.builder().sort(IssueQuery.SORT_BY_CREATION_DATE).asc(true); @@ -449,9 +477,9 @@ public class IssueIndexMediumTest { @Test public void sort_by_update_date() throws Exception { - IssueDto issue1 = IssueTesting.newDto(rule, file, project).setIssueUpdateDate(DateUtils.parseDate("2014-09-23")); - IssueDto issue2 = IssueTesting.newDto(rule, file, project).setIssueUpdateDate(DateUtils.parseDate("2014-09-24")); - db.issueDao().insert(session, issue1, issue2); + db.issueDao().insert(session, + IssueTesting.newDto(rule, file, project).setIssueUpdateDate(DateUtils.parseDate("2014-09-23")), + IssueTesting.newDto(rule, file, project).setIssueUpdateDate(DateUtils.parseDate("2014-09-24"))); session.commit(); IssueQuery.Builder query = IssueQuery.builder().sort(IssueQuery.SORT_BY_UPDATE_DATE).asc(true); @@ -469,10 +497,10 @@ public class IssueIndexMediumTest { @Test public void sort_by_close_date() throws Exception { - IssueDto issue1 = IssueTesting.newDto(rule, file, project).setIssueCloseDate(DateUtils.parseDate("2014-09-23")); - IssueDto issue2 = IssueTesting.newDto(rule, file, project).setIssueCloseDate(DateUtils.parseDate("2014-09-24")); - IssueDto issue3 = IssueTesting.newDto(rule, file, project).setIssueCloseDate(null); - db.issueDao().insert(session, issue1, issue2, issue3); + db.issueDao().insert(session, + IssueTesting.newDto(rule, file, project).setIssueCloseDate(DateUtils.parseDate("2014-09-23")), + IssueTesting.newDto(rule, file, project).setIssueCloseDate(DateUtils.parseDate("2014-09-24")), + IssueTesting.newDto(rule, file, project).setIssueCloseDate(null)); session.commit(); IssueQuery.Builder query = IssueQuery.builder().sort(IssueQuery.SORT_BY_CLOSE_DATE).asc(true); -- 2.39.5