Skip to content

Commit

Permalink
Send comments as robotComments (TouK#238)
Browse files Browse the repository at this point in the history
Robot comments show up in the Findings tab, instead of in the comments.
This makes it much easier to differentiate from them a reviewer's
comments.

The API requires a "runId" for the comment. I've chosen to just send a
random UUID for now, but eventually we could wire in something like a
build number or something.
  • Loading branch information
Marquis Wong authored and Marquis Wong committed Oct 22, 2021
1 parent ce4d75e commit a12aec1
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.google.common.base.Joiner;
import com.google.gerrit.extensions.api.changes.ReviewInput;
import java.util.UUID;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
Expand All @@ -11,13 +12,14 @@
import pl.touk.sputnik.review.Review;
import pl.touk.sputnik.review.ReviewFile;

import java.util.HashMap;
import java.util.List;
import java.util.HashMap;
import java.util.stream.Collectors;

@AllArgsConstructor
@Slf4j
public class ReviewInputBuilder {
private static final String ROBOT_ID = "sputnik";

private static final String MESSAGE_SEPARATOR = ". ";

Expand All @@ -29,21 +31,26 @@ public ReviewInput toReviewInput(@NotNull Review review, @Nullable String tag) {
if (StringUtils.isNotBlank(tag)) {
reviewInput.tag = tag;
}
reviewInput.comments = review.getFiles().stream()
.collect(Collectors.toMap(ReviewFile::getReviewFilename, this::buildFileComments));

String runId = UUID.randomUUID().toString();
reviewInput.robotComments = review.getFiles().stream()
.collect(Collectors.toMap(ReviewFile::getReviewFilename, reviewFile -> buildFileComments(reviewFile, runId)));
return reviewInput;
}

@NotNull
private List<ReviewInput.CommentInput> buildFileComments(@NotNull ReviewFile reviewFile) {
private List<ReviewInput.RobotCommentInput> buildFileComments(@NotNull ReviewFile reviewFile, String aRunId) {
return reviewFile.getComments().stream()
.map(this::buildCommentInput)
.map((Comment comment) -> buildCommentInput(comment, aRunId))
.collect(Collectors.toList());
}

@NotNull
private ReviewInput.CommentInput buildCommentInput(Comment comment) {
ReviewInput.CommentInput commentInput = new ReviewInput.CommentInput();
private ReviewInput.RobotCommentInput buildCommentInput(Comment comment, String aRunId) {
ReviewInput.RobotCommentInput commentInput = new ReviewInput.RobotCommentInput();

commentInput.robotId = ROBOT_ID;
commentInput.robotRunId = aRunId;
commentInput.line = comment.getLine();
commentInput.message = comment.getMessage();
return commentInput;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package pl.touk.sputnik.connector.gerrit;

import com.google.gerrit.extensions.api.changes.ReviewInput;
import com.google.gerrit.extensions.api.changes.ReviewInput.RobotCommentInput;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
Expand All @@ -11,6 +12,8 @@
import pl.touk.sputnik.configuration.ConfigurationBuilder;
import pl.touk.sputnik.review.Review;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

@ExtendWith(MockitoExtension.class)
Expand All @@ -28,10 +31,15 @@ void shouldBuildReviewInput() {
ReviewInput reviewInput = reviewInputBuilder.toReviewInput(review, TAG);

assertThat(reviewInput.message).isEqualTo("Total 8 violations found");
assertThat(reviewInput.comments).hasSize(4);
assertThat(reviewInput.comments).isNull();
assertThat(reviewInput.robotComments).hasSize(4);
assertThat(reviewInput.tag).isEqualTo(TAG);
assertThat(reviewInput.comments.get("filename1")).hasSize(2);
assertThat(reviewInput.comments.get("filename1").get(0).message).isEqualTo("test1");
List<RobotCommentInput> file1comments = reviewInput.robotComments.get("filename1");
assertThat(file1comments).hasSize(2);
RobotCommentInput comment1 = file1comments.get(0);
assertThat(comment1.message).isEqualTo("test1");
assertThat(comment1.robotId).isEqualTo("sputnik");
assertThat(comment1.robotRunId).isNotEmpty();
assertThat(reviewInput.labels.get("Code-Review")).isEqualTo((short) 1);
}

Expand Down

0 comments on commit a12aec1

Please sign in to comment.