import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises"; import { execFile } from "node:child_process"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { promisify } from "node:util"; import { describe, expect, it } from "vitest"; const execFileAsync = promisify(execFile); describe("deployment environment preparation", () => { it("adds a strong internal worker token when .env.local does not define one", async () => { const dir = await mkdtemp(join(tmpdir(), "zhinian-deploy-env-")); try { await writeFile(join(dir, ".env.example"), "APP_PORT=3000\nZHINIAN_INTERNAL_WORKER_TOKEN=change-me-worker-token\n"); await writeFile(join(dir, ".env.local"), "APP_PORT=3001\n"); const { stdout } = await execFileAsync(process.execPath, ["scripts/ensure-deploy-env.mjs", dir], { cwd: new URL("../", import.meta.url) }); const envLocal = await readFile(join(dir, ".env.local"), "utf8"); expect(stdout).toContain("Added ZHINIAN_INTERNAL_WORKER_TOKEN"); expect(envLocal).toMatch(/^ZHINIAN_INTERNAL_WORKER_TOKEN=[a-f0-9]{64}$/m); expect(envLocal).toContain("APP_PORT=3001"); } finally { await rm(dir, { force: true, recursive: true }); } }); });