diff options
Diffstat (limited to 'packages/core/tests/tools/read-file.test.ts')
| -rw-r--r-- | packages/core/tests/tools/read-file.test.ts | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/packages/core/tests/tools/read-file.test.ts b/packages/core/tests/tools/read-file.test.ts new file mode 100644 index 0000000..ce65b37 --- /dev/null +++ b/packages/core/tests/tools/read-file.test.ts @@ -0,0 +1,36 @@ +import { mkdtemp, rm, writeFile } from "node:fs/promises"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { createReadFileTool } from "../../src/tools/read-file.js"; + +describe("read_file tool", () => { + let workDir: string; + + beforeEach(async () => { + workDir = await mkdtemp(join(tmpdir(), "dispatch-test-")); + }); + + afterEach(async () => { + await rm(workDir, { recursive: true, force: true }); + }); + + it("reads an existing file", async () => { + const tool = createReadFileTool(workDir); + await writeFile(join(workDir, "hello.txt"), "Hello, world!"); + const result = await tool.execute({ path: "hello.txt" }); + expect(result).toBe("Hello, world!"); + }); + + it("returns error for non-existent file", async () => { + const tool = createReadFileTool(workDir); + const result = await tool.execute({ path: "missing.txt" }); + expect(result).toMatch(/not found/i); + }); + + it("blocks path traversal", async () => { + const tool = createReadFileTool(workDir); + const result = await tool.execute({ path: "../etc/passwd" }); + expect(result).toMatch(/outside the working directory/i); + }); +}); |
