Files
PaperClipAI/tests/runner-e2e/source-startup.test.ts
T

32 lines
1.6 KiB
TypeScript

import { mkdtemp, mkdir, readFile, rm, writeFile } from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import { afterEach, expect, it } from "vitest";
import { prepareSourceServerDependencies } from "./source-startup.js";
const roots: string[] = [];
afterEach(async () => { await Promise.all(roots.splice(0).map(root => rm(root, { recursive: true, force: true }))); });
async function fixture(source: string) {
const root = await mkdtemp(path.join(os.tmpdir(), "paperclip-source-startup-")); roots.push(root);
await mkdir(path.join(root, "scripts"));
await writeFile(path.join(root, "scripts/ensure-plugin-build-deps.mjs"), source);
return root;
}
it("prepares missing source dependencies before the entry can import them", async () => {
const root = await fixture(`import {writeFileSync} from 'node:fs'; writeFileSync('dependency.mjs', 'export default 42');`);
await expect(readFile(path.join(root, "dependency.mjs"))).rejects.toThrow();
await prepareSourceServerDependencies(root, {}, false);
expect(await readFile(path.join(root, "dependency.mjs"), "utf8")).toBe("export default 42");
});
it("fails before server admission when dependency preparation fails", async () => {
const root = await fixture("process.exit(7)");
await expect(prepareSourceServerDependencies(root, {}, false)).rejects.toMatchObject({ code: 7 });
});
it("does not execute checkout helpers for an installed package", async () => {
const root = await fixture("throw new Error('must not execute checkout code')");
await expect(prepareSourceServerDependencies(root, {}, true)).resolves.toBeUndefined();
});