feat(comment-checker): run checks for apply_patch edits

This commit is contained in:
YeonGyu-Kim
2026-02-10 13:58:34 +09:00
parent 19a4324b3e
commit 61531ca26c
3 changed files with 195 additions and 13 deletions
@@ -0,0 +1,83 @@
import { describe, it, expect, mock, beforeEach } from "bun:test"
const processApplyPatchEditsWithCli = mock(async () => {})
mock.module("./cli-runner", () => ({
initializeCommentCheckerCli: () => {},
getCommentCheckerCliPathPromise: () => Promise.resolve("/tmp/fake-comment-checker"),
isCliPathUsable: () => true,
processWithCli: async () => {},
processApplyPatchEditsWithCli,
}))
const { createCommentCheckerHooks } = await import("./hook")
describe("comment-checker apply_patch integration", () => {
beforeEach(() => {
processApplyPatchEditsWithCli.mockClear()
})
it("runs comment checker using apply_patch metadata.files", async () => {
// given
const hooks = createCommentCheckerHooks()
const input = { tool: "apply_patch", sessionID: "ses_test", callID: "call_test" }
const output = {
title: "ok",
output: "Success. Updated the following files:\nM src/a.ts",
metadata: {
files: [
{
filePath: "/repo/src/a.ts",
before: "const a = 1\n",
after: "// comment\nconst a = 1\n",
type: "update",
},
{
filePath: "/repo/src/old.ts",
movePath: "/repo/src/new.ts",
before: "const b = 1\n",
after: "// moved comment\nconst b = 1\n",
type: "move",
},
{
filePath: "/repo/src/delete.ts",
before: "// deleted\n",
after: "",
type: "delete",
},
],
},
}
// when
await hooks["tool.execute.after"](input, output)
// then
expect(processApplyPatchEditsWithCli).toHaveBeenCalledTimes(1)
expect(processApplyPatchEditsWithCli).toHaveBeenCalledWith(
"ses_test",
[
{ filePath: "/repo/src/a.ts", before: "const a = 1\n", after: "// comment\nconst a = 1\n" },
{ filePath: "/repo/src/new.ts", before: "const b = 1\n", after: "// moved comment\nconst b = 1\n" },
],
expect.any(Object),
"/tmp/fake-comment-checker",
undefined,
expect.any(Function),
)
})
it("skips when apply_patch metadata.files is missing", async () => {
// given
const hooks = createCommentCheckerHooks()
const input = { tool: "apply_patch", sessionID: "ses_test", callID: "call_test" }
const output = { title: "ok", output: "ok", metadata: {} }
// when
await hooks["tool.execute.after"](input, output)
// then
expect(processApplyPatchEditsWithCli).toHaveBeenCalledTimes(0)
})
})