diff options
Diffstat (limited to 'packages/core/tests/tools/list-files.test.ts')
| -rw-r--r-- | packages/core/tests/tools/list-files.test.ts | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/packages/core/tests/tools/list-files.test.ts b/packages/core/tests/tools/list-files.test.ts new file mode 100644 index 0000000..ead1df3 --- /dev/null +++ b/packages/core/tests/tools/list-files.test.ts @@ -0,0 +1,41 @@ +import { mkdir, 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 { createListFilesTool } from "../../src/tools/list-files.js"; + +describe("list_files tool", () => { + let workDir: string; + + beforeEach(async () => { + workDir = await mkdtemp(join(tmpdir(), "dispatch-test-")); + }); + + afterEach(async () => { + await rm(workDir, { recursive: true, force: true }); + }); + + it("lists directory contents", async () => { + const tool = createListFilesTool(workDir); + await writeFile(join(workDir, "file1.txt"), "a"); + await writeFile(join(workDir, "file2.txt"), "b"); + await mkdir(join(workDir, "subdir")); + const result = await tool.execute({ path: "." }); + expect(result).toContain("file1.txt"); + expect(result).toContain("file2.txt"); + expect(result).toContain("subdir/"); + }); + + it("defaults to current directory when path is undefined", async () => { + const tool = createListFilesTool(workDir); + await writeFile(join(workDir, "hello.txt"), "hi"); + const result = await tool.execute({}); + expect(result).toContain("hello.txt"); + }); + + it("blocks path traversal", async () => { + const tool = createListFilesTool(workDir); + const result = await tool.execute({ path: "../" }); + expect(result).toMatch(/outside the working directory/i); + }); +}); |
