feat(comment-checker): run checks for apply_patch edits
This commit is contained in:
@@ -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)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user