forked from EduCraft/curriculum-project-hub
58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
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<string> {
|
|
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;
|
|
}
|