import { describe, expect, it } from "vitest"; import { mkdir, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { resolveDeliverableFile } from "../../src/feishu/fileDelivery.js"; describe("file delivery path resolution", () => { it("resolves a repo-root file from a project workspace only when explicitly named", async () => { const root = await makeRepo(); try { const workspace = join(root, "examples", "TH-141"); await writeFile(join(root, "README.md"), "# root readme\n"); await expect(resolveDeliverableFile("README.md", workspace)).resolves.toEqual({ path: join(root, "README.md"), name: "README.md", }); } finally { await rm(root, { recursive: true, force: true }); } }); it("resolves a bare build filename against workspace/build", async () => { const root = await makeRepo(); try { const workspace = join(root, "examples", "TH-141"); const pdf = join(workspace, "build", "student.pdf"); await writeFile(pdf, "pdf bytes"); await expect(resolveDeliverableFile("student.pdf", workspace)).resolves.toEqual({ path: pdf, name: "student.pdf", }); } finally { await rm(root, { recursive: true, force: true }); } }); it("does not infer files from natural-language prompts", async () => { const root = await makeRepo(); try { const workspace = join(root, "examples", "TH-141"); await writeFile(join(workspace, "build", "student.pdf"), "pdf bytes"); await expect(resolveDeliverableFile("cph build 生成 PDF 给我", workspace)).resolves.toBeNull(); } finally { await rm(root, { recursive: true, force: true }); } }); }); async function makeRepo(): Promise { const root = await mkdir(join(tmpdir(), `hub-file-delivery-${Date.now()}-${Math.random().toString(36).slice(2)}`), { recursive: true }); await mkdir(join(root, ".git")); await mkdir(join(root, "examples", "TH-141", "build"), { recursive: true }); return root; }