From 69727ff442d9f3b5512e706b05a6748ae92e112b Mon Sep 17 00:00:00 2001 From: YOLO <3372134858@qq.com> Date: Tue, 2 Jun 2026 11:01:10 +0800 Subject: [PATCH 1/2] test(github): cover representative command comment variants --- .../GitHubWebhookPayloadParserTest.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/test/java/com/codepilot/module/github/webhook/GitHubWebhookPayloadParserTest.java b/src/test/java/com/codepilot/module/github/webhook/GitHubWebhookPayloadParserTest.java index b69ef53..cff80f1 100644 --- a/src/test/java/com/codepilot/module/github/webhook/GitHubWebhookPayloadParserTest.java +++ b/src/test/java/com/codepilot/module/github/webhook/GitHubWebhookPayloadParserTest.java @@ -134,6 +134,60 @@ void shouldParseMentionChatCommandIssueCommentEvent() { assertThat(payload.getMentionedBot()).isTrue(); } + @Test + void shouldParseRepresentativeCommentTypesWithDeterministicRouting() { + GitHubPullRequestWebhookPayload legacyReviewPayload = parserWithoutClassifierButLlmAvailable() + .parse("issue_comment", issueCommentPayload("created", "/review", true)); + assertThat(legacyReviewPayload.isIgnored()).isFalse(); + assertThat(legacyReviewPayload.getCommandType()).isEqualTo(GithubCommandType.REVIEW.name()); + assertThat(legacyReviewPayload.getMentionedBot()).isFalse(); + + GitHubPullRequestWebhookPayload explicitReviewPayload = parserWithoutClassifierButLlmAvailable() + .parse("issue_comment", issueCommentPayload("created", "@x-pilotx review this PR", true)); + assertThat(explicitReviewPayload.isIgnored()).isFalse(); + assertThat(explicitReviewPayload.getCommandType()).isEqualTo(GithubCommandType.REVIEW.name()); + assertThat(explicitReviewPayload.getMentionedBot()).isTrue(); + + GitHubPullRequestWebhookPayload summaryPayload = parserWithoutClassifierButLlmAvailable() + .parse("issue_comment", issueCommentPayload("created", "@x-pilotx summarize the current review findings", true)); + assertThat(summaryPayload.isIgnored()).isFalse(); + assertThat(summaryPayload.getCommandType()).isEqualTo(GithubCommandType.CHAT.name()); + assertThat(summaryPayload.getMentionedBot()).isTrue(); + } + + @Test + void shouldParseRepresentativeCommentTypesThroughClassifierWhenNeeded() { + GitHubWebhookPayloadParser fixParser = parserWithAiResponse(""" + { + "type": "FIX", + "dryRun": false, + "reason": "asks the bot to fix the above issues" + } + """); + GitHubPullRequestWebhookPayload fixPayload = fixParser.parse( + "issue_comment", + issueCommentPayload("created", "@x-pilotx please fix the above issues", true) + ); + assertThat(fixPayload.isIgnored()).isFalse(); + assertThat(fixPayload.getCommandType()).isEqualTo(GithubCommandType.FIX.name()); + assertThat(fixPayload.getMentionedBot()).isTrue(); + + GitHubWebhookPayloadParser chatParser = parserWithAiResponse(""" + { + "type": "CHAT", + "dryRun": false, + "reason": "greeting" + } + """); + GitHubPullRequestWebhookPayload chatPayload = chatParser.parse( + "issue_comment", + issueCommentPayload("created", "@x-pilotx hi", true) + ); + assertThat(chatPayload.isIgnored()).isFalse(); + assertThat(chatPayload.getCommandType()).isEqualTo(GithubCommandType.CHAT.name()); + assertThat(chatPayload.getMentionedBot()).isTrue(); + } + @Test void shouldParseUnknownMentionAsCommand() { GitHubWebhookPayloadParser aiParser = parserWithAiResponse(""" From b8b8272ea9c5ac140647fa0f9138a9a5a2fa7e29 Mon Sep 17 00:00:00 2001 From: YOLO <3372134858@qq.com> Date: Tue, 2 Jun 2026 11:13:05 +0800 Subject: [PATCH 2/2] test(review): add validation fixture that surfaces a review finding --- .../ReviewBotValidationFixtureTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/test/java/com/codepilot/module/review/validation/ReviewBotValidationFixtureTest.java diff --git a/src/test/java/com/codepilot/module/review/validation/ReviewBotValidationFixtureTest.java b/src/test/java/com/codepilot/module/review/validation/ReviewBotValidationFixtureTest.java new file mode 100644 index 0000000..7d05449 --- /dev/null +++ b/src/test/java/com/codepilot/module/review/validation/ReviewBotValidationFixtureTest.java @@ -0,0 +1,15 @@ +package com.codepilot.module.review.validation; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class ReviewBotValidationFixtureTest { + + @Test + void shouldKeepAnObviousSqlRiskSnippetForReviewBotValidation() { + String unsafeSql = "SELECT * FROM users WHERE id = ${id}"; + + assertThat(unsafeSql).contains("${id}"); + } +}