import { describe, it, expect, vi, beforeEach } from "vitest"; import { loadCliConfig } from "../lib/config.js"; describe("loadCliConfig", () => { beforeEach(() => { vi.unstubAllEnvs(); }); it("loads all required env vars", () => { vi.stubEnv("DATABASE_URL", "postgres://localhost:5432/atbb"); vi.stubEnv("FORUM_DID", "did:plc:test123"); vi.stubEnv("PDS_URL", "https://bsky.social"); vi.stubEnv("FORUM_HANDLE", "forum.example.com"); vi.stubEnv("FORUM_PASSWORD", "secret"); const config = loadCliConfig(); expect(config.databaseUrl).toBe("postgres://localhost:5432/atbb"); expect(config.forumDid).toBe("did:plc:test123"); expect(config.pdsUrl).toBe("https://bsky.social"); expect(config.forumHandle).toBe("forum.example.com"); expect(config.forumPassword).toBe("secret"); }); it("returns missing fields list when env vars are absent", () => { // Explicitly stub all checked vars to empty — vi.unstubAllEnvs() only // reverses previous stubs, it does NOT clear real env vars (e.g. CI // sets DATABASE_URL for its PostgreSQL service container). vi.stubEnv("DATABASE_URL", ""); vi.stubEnv("FORUM_DID", ""); vi.stubEnv("FORUM_HANDLE", ""); vi.stubEnv("FORUM_PASSWORD", ""); const config = loadCliConfig(); expect(config.missing).toContain("DATABASE_URL"); expect(config.missing).toContain("FORUM_DID"); expect(config.missing).toContain("FORUM_HANDLE"); expect(config.missing).toContain("FORUM_PASSWORD"); }); it("defaults PDS_URL to https://bsky.social", () => { vi.stubEnv("DATABASE_URL", "postgres://localhost/atbb"); vi.stubEnv("FORUM_DID", "did:plc:test"); vi.stubEnv("FORUM_HANDLE", "handle"); vi.stubEnv("FORUM_PASSWORD", "pass"); const config = loadCliConfig(); expect(config.pdsUrl).toBe("https://bsky.social"); expect(config.missing).toHaveLength(0); }); });