mirror of
https://github.com/SonarSource/sonarqube.git
synced 2024-09-13 23:58:00 +02:00
SONAR-6416 add field "id" to response of api/tests/covered_files
Refactoring: use protobuf to generate response
This commit is contained in:
parent
64857ae7f4
commit
24c4856b33
@ -26,10 +26,10 @@ import com.google.common.collect.Maps;
|
||||
import com.google.common.io.Resources;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.annotation.Nonnull;
|
||||
import org.sonar.api.server.ws.Request;
|
||||
import org.sonar.api.server.ws.Response;
|
||||
import org.sonar.api.server.ws.WebService;
|
||||
import org.sonar.api.utils.text.JsonWriter;
|
||||
import org.sonar.api.web.UserRole;
|
||||
import org.sonar.db.DbClient;
|
||||
import org.sonar.db.DbSession;
|
||||
@ -39,6 +39,8 @@ import org.sonar.db.component.ComponentDtoFunctions;
|
||||
import org.sonar.server.test.index.CoveredFileDoc;
|
||||
import org.sonar.server.test.index.TestIndex;
|
||||
import org.sonar.server.user.UserSession;
|
||||
import org.sonar.server.ws.WsUtils;
|
||||
import org.sonarqube.ws.WsTests;
|
||||
|
||||
public class CoveredFilesAction implements TestsWsAction {
|
||||
|
||||
@ -71,29 +73,29 @@ public class CoveredFilesAction implements TestsWsAction {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(Request request, Response response) {
|
||||
public void handle(Request request, Response response) throws Exception {
|
||||
String testUuid = request.mandatoryParam(TEST_UUID);
|
||||
userSession.checkComponentUuidPermission(UserRole.CODEVIEWER, index.searchByTestUuid(testUuid).fileUuid());
|
||||
|
||||
List<CoveredFileDoc> coveredFiles = index.coveredFiles(testUuid);
|
||||
Map<String, ComponentDto> componentsByUuid = buildComponentsByUuid(coveredFiles);
|
||||
JsonWriter json = response.newJsonWriter().beginObject();
|
||||
if (!coveredFiles.isEmpty()) {
|
||||
writeTests(coveredFiles, componentsByUuid, json);
|
||||
}
|
||||
json.endObject().close();
|
||||
}
|
||||
|
||||
private static void writeTests(List<CoveredFileDoc> coveredFiles, Map<String, ComponentDto> componentsByUuid, JsonWriter json) {
|
||||
json.name("files").beginArray();
|
||||
for (CoveredFileDoc coveredFile : coveredFiles) {
|
||||
json.beginObject();
|
||||
json.prop("key", componentsByUuid.get(coveredFile.fileUuid()).key());
|
||||
json.prop("longName", componentsByUuid.get(coveredFile.fileUuid()).longName());
|
||||
json.prop("coveredLines", coveredFile.coveredLines().size());
|
||||
json.endObject();
|
||||
WsTests.CoveredFilesResponse.Builder responseBuilder = WsTests.CoveredFilesResponse.newBuilder();
|
||||
if (!coveredFiles.isEmpty()) {
|
||||
for (CoveredFileDoc doc : coveredFiles) {
|
||||
WsTests.CoveredFilesResponse.CoveredFile.Builder fileBuilder = WsTests.CoveredFilesResponse.CoveredFile.newBuilder();
|
||||
fileBuilder.setId(doc.fileUuid());
|
||||
fileBuilder.setCoveredLines(doc.coveredLines().size());
|
||||
ComponentDto component = componentsByUuid.get(doc.fileUuid());
|
||||
if (component != null) {
|
||||
fileBuilder.setKey(component.key());
|
||||
fileBuilder.setLongName(component.longName());
|
||||
}
|
||||
|
||||
responseBuilder.addFiles(fileBuilder);
|
||||
}
|
||||
}
|
||||
json.endArray();
|
||||
WsUtils.writeProtobuf(responseBuilder.build(), request, response);
|
||||
}
|
||||
|
||||
private Map<String, ComponentDto> buildComponentsByUuid(List<CoveredFileDoc> coveredFiles) {
|
||||
@ -110,7 +112,7 @@ public class CoveredFilesAction implements TestsWsAction {
|
||||
|
||||
private static class CoveredFileToFileUuidFunction implements Function<CoveredFileDoc, String> {
|
||||
@Override
|
||||
public String apply(CoveredFileDoc coveredFile) {
|
||||
public String apply(@Nonnull CoveredFileDoc coveredFile) {
|
||||
return coveredFile.fileUuid();
|
||||
}
|
||||
}
|
||||
|
@ -63,13 +63,13 @@ public class CoveredFilesActionTest {
|
||||
|
||||
when(testIndex.searchByTestUuid(anyString()).fileUuid()).thenReturn("test-file-uuid");
|
||||
when(testIndex.coveredFiles("test-uuid")).thenReturn(Arrays.asList(
|
||||
new CoveredFileDoc().setFileUuid("bar-uuid").setCoveredLines(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)),
|
||||
new CoveredFileDoc().setFileUuid("file-uuid").setCoveredLines(Arrays.asList(1, 2, 3))
|
||||
new CoveredFileDoc().setFileUuid("FILE1").setCoveredLines(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)),
|
||||
new CoveredFileDoc().setFileUuid("FILE2").setCoveredLines(Arrays.asList(1, 2, 3))
|
||||
));
|
||||
when(dbClient.componentDao().selectByUuids(any(DbSession.class), anyList())).thenReturn(
|
||||
Arrays.asList(
|
||||
newFileDto(newProjectDto(), "bar-uuid").setKey("org.foo.Bar.java").setLongName("src/main/java/org/foo/Bar.java"),
|
||||
newFileDto(newProjectDto(), "file-uuid").setKey("org.foo.File.java").setLongName("src/main/java/org/foo/File.java")));
|
||||
newFileDto(newProjectDto(), "FILE1").setKey("org.foo.Bar.java").setLongName("src/main/java/org/foo/Bar.java"),
|
||||
newFileDto(newProjectDto(), "FILE2").setKey("org.foo.File.java").setLongName("src/main/java/org/foo/File.java")));
|
||||
|
||||
WsTester.TestRequest request = ws.newGetRequest("api/tests", "covered_files").setParam(TEST_UUID, "test-uuid");
|
||||
|
||||
|
@ -1,11 +1,13 @@
|
||||
{
|
||||
"files": [
|
||||
{
|
||||
"id": "FILE1",
|
||||
"key": "org.foo.Bar.java",
|
||||
"longName": "src/main/java/org/foo/Bar.java",
|
||||
"coveredLines": 10
|
||||
},
|
||||
{
|
||||
"id": "FILE2",
|
||||
"key": "org.foo.File.java",
|
||||
"longName": "src/main/java/org/foo/File.java",
|
||||
"coveredLines": 3
|
||||
|
@ -32,6 +32,19 @@ message ListResponse {
|
||||
repeated Test tests = 2;
|
||||
}
|
||||
|
||||
// WS api/tests/covered_files
|
||||
message CoveredFilesResponse {
|
||||
repeated CoveredFile files = 1;
|
||||
|
||||
message CoveredFile {
|
||||
optional string id = 1;
|
||||
optional string key = 2;
|
||||
optional string longName = 3;
|
||||
optional int32 coveredLines = 4;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
message Test {
|
||||
optional string id = 1;
|
||||
optional string name = 2;
|
||||
|
Loading…
Reference in New Issue
Block a user