30 lines
1.2 KiB
TypeScript
30 lines
1.2 KiB
TypeScript
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 });
|
|
}
|
|
});
|
|
});
|