84 lines
2.5 KiB
TypeScript
84 lines
2.5 KiB
TypeScript
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)
|
|
})
|
|
})
|