| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import { beforeEach, afterEach, describe, expect, it } from "vitest";
- import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
- import { join } from "node:path";
- import { tmpdir } from "node:os";
- describe("project bootstrap", () => {
- const originalHome = process.env.HOME;
- let tempDir: string;
- beforeEach(async () => {
- tempDir = await mkdtemp(join(tmpdir(), "inkos-bootstrap-"));
- process.env.HOME = tempDir;
- });
- afterEach(async () => {
- process.env.HOME = originalHome;
- await rm(tempDir, { recursive: true, force: true });
- });
- it("creates a minimal Studio-first project when none exists", async () => {
- const { ensureProjectDirectoryInitialized } = await import("../project-bootstrap.js");
- const initialized = await ensureProjectDirectoryInitialized(tempDir, { language: "zh" });
- expect(initialized).toBe(true);
- const config = JSON.parse(await readFile(join(tempDir, "inkos.json"), "utf-8"));
- expect(config.name).toMatch(/^inkos-bootstrap-/);
- expect(config.version).toBe("0.1.0");
- expect(config.llm.configSource).toBe("studio");
- expect(config.llm.service).toBe("custom");
- expect(config.llm.model).toBe("");
- expect(config.llm.baseUrl).toBe("");
- await expect(readFile(join(tempDir, ".nvmrc"), "utf-8")).resolves.toBe("22\n");
- await expect(readFile(join(tempDir, ".node-version"), "utf-8")).resolves.toBe("22\n");
- });
- it("does not overwrite support files when auto-initializing", async () => {
- await writeFile(join(tempDir, ".env"), "EXISTING=1\n", "utf-8");
- await writeFile(join(tempDir, ".gitignore"), "CUSTOM\n", "utf-8");
- const { ensureProjectDirectoryInitialized } = await import("../project-bootstrap.js");
- await ensureProjectDirectoryInitialized(tempDir, { language: "zh" });
- await expect(readFile(join(tempDir, ".env"), "utf-8")).resolves.toBe("EXISTING=1\n");
- await expect(readFile(join(tempDir, ".gitignore"), "utf-8")).resolves.toBe("CUSTOM\n");
- });
- it("returns false when the directory is already an InkOS project", async () => {
- await writeFile(join(tempDir, "inkos.json"), "{}\n", "utf-8");
- const { ensureProjectDirectoryInitialized } = await import("../project-bootstrap.js");
- await expect(ensureProjectDirectoryInitialized(tempDir, { language: "zh" })).resolves.toBe(false);
- });
- });
|