From 20800515eafd42ebe95017409df4430c7dc16e60 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Thu, 5 Dec 2019 15:12:52 +0100 Subject: [PATCH] SONAR-12719 add resolution to response of api/hotspots/show --- .../sonar/server/hotspot/ws/ShowAction.java | 3 +- .../server/hotspot/ws/ShowActionTest.java | 35 ++++++++++++++++++- sonar-ws/src/main/protobuf/ws-hotspots.proto | 3 +- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/hotspot/ws/ShowAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/hotspot/ws/ShowAction.java index 862f73f53ac..5aa202080ae 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/hotspot/ws/ShowAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/hotspot/ws/ShowAction.java @@ -103,8 +103,7 @@ public class ShowAction implements HotspotsWsAction { private void formatHotspot(ShowWsResponse.Builder builder, IssueDto hotspot) { builder.setKey(hotspot.getKey()); ofNullable(hotspot.getStatus()).ifPresent(builder::setStatus); - // FIXME resolution field will be added later - // ofNullable(hotspot.getResolution()).ifPresent(builder::setResolution); + ofNullable(hotspot.getResolution()).ifPresent(builder::setResolution); ofNullable(hotspot.getLine()).ifPresent(builder::setLine); builder.setMessage(nullToEmpty(hotspot.getMessage())); ofNullable(hotspot.getAssigneeUuid()).ifPresent(builder::setAssignee); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/hotspot/ws/ShowActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/hotspot/ws/ShowActionTest.java index 9f394b96e9e..61bcb3c5bec 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/hotspot/ws/ShowActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/hotspot/ws/ShowActionTest.java @@ -30,9 +30,11 @@ import java.util.Set; import java.util.function.Consumer; import java.util.stream.Collectors; import java.util.stream.Stream; +import javax.annotation.Nullable; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.sonar.api.issue.Issue; import org.sonar.api.rules.RuleType; import org.sonar.api.utils.System2; import org.sonar.api.web.UserRole; @@ -174,6 +176,37 @@ public class ShowActionTest { assertThat(response.getKey()).isEqualTo(hotspot.getKey()); } + @Test + @UseDataProvider("statusAndResolutionCombinations") + public void returns_status_and_resolution(String status, @Nullable String resolution) { + ComponentDto project = dbTester.components().insertPrivateProject(); + userSessionRule.registerComponents(project); + userSessionRule.logIn().addProjectPermission(UserRole.USER, project); + ComponentDto file = dbTester.components().insertComponent(newFileDto(project)); + RuleDefinitionDto rule = newRule(SECURITY_HOTSPOT); + IssueDto hotspot = dbTester.issues().insertIssue(newHotspot(project, file, rule).setStatus(status).setResolution(resolution)); + + Hotspots.ShowWsResponse response = newRequest(hotspot) + .executeProtobuf(Hotspots.ShowWsResponse.class); + + assertThat(response.getStatus()).isEqualTo(status); + if (resolution == null) { + assertThat(response.hasResolution()).isFalse(); + } else { + assertThat(response.getResolution()).isEqualTo(resolution); + } + } + + @DataProvider + public static Object[][] statusAndResolutionCombinations() { + return new Object[][] { + {Issue.STATUS_TO_REVIEW, null}, + {Issue.STATUS_REVIEWED, Issue.RESOLUTION_FIXED}, + {Issue.STATUS_REVIEWED, Issue.RESOLUTION_SAFE}, + {Issue.STATUS_CLOSED, Issue.RESOLUTION_REMOVED} + }; + } + @Test public void returns_hotspot_component_and_rule() { ComponentDto project = dbTester.components().insertPublicProject(); @@ -193,7 +226,7 @@ public class ShowActionTest { } @Test - public void returns_no_textrange_when_locations_have_none() { + public void returns_no_textRange_when_locations_have_none() { ComponentDto project = dbTester.components().insertPublicProject(); userSessionRule.registerComponents(project); ComponentDto file = dbTester.components().insertComponent(newFileDto(project)); diff --git a/sonar-ws/src/main/protobuf/ws-hotspots.proto b/sonar-ws/src/main/protobuf/ws-hotspots.proto index cef59629a8e..e851afb7adb 100644 --- a/sonar-ws/src/main/protobuf/ws-hotspots.proto +++ b/sonar-ws/src/main/protobuf/ws-hotspots.proto @@ -57,8 +57,7 @@ message ShowWsResponse { optional Component project = 3; optional Rule rule = 4; optional string status = 5; -// FIXME resolution field will be added later -// optional string resolution = 6; + optional string resolution = 6; optional int32 line = 7; optional string message = 8; optional string assignee = 9; -- 2.39.5