WIP! A BB-style forum, on the ATmosphere! We're still working... we'll be back soon when we have something to show off!
node typescript hono htmx atproto
at root/atb-56-theme-caching-layer 53 lines 1.9 kB view raw
1import { describe, it, expect, vi, beforeEach } from "vitest"; 2import { loadCliConfig } from "../lib/config.js"; 3 4describe("loadCliConfig", () => { 5 beforeEach(() => { 6 vi.unstubAllEnvs(); 7 }); 8 9 it("loads all required env vars", () => { 10 vi.stubEnv("DATABASE_URL", "postgres://localhost:5432/atbb"); 11 vi.stubEnv("FORUM_DID", "did:plc:test123"); 12 vi.stubEnv("PDS_URL", "https://bsky.social"); 13 vi.stubEnv("FORUM_HANDLE", "forum.example.com"); 14 vi.stubEnv("FORUM_PASSWORD", "secret"); 15 16 const config = loadCliConfig(); 17 18 expect(config.databaseUrl).toBe("postgres://localhost:5432/atbb"); 19 expect(config.forumDid).toBe("did:plc:test123"); 20 expect(config.pdsUrl).toBe("https://bsky.social"); 21 expect(config.forumHandle).toBe("forum.example.com"); 22 expect(config.forumPassword).toBe("secret"); 23 }); 24 25 it("returns missing fields list when env vars are absent", () => { 26 // Explicitly stub all checked vars to empty — vi.unstubAllEnvs() only 27 // reverses previous stubs, it does NOT clear real env vars (e.g. CI 28 // sets DATABASE_URL for its PostgreSQL service container). 29 vi.stubEnv("DATABASE_URL", ""); 30 vi.stubEnv("FORUM_DID", ""); 31 vi.stubEnv("FORUM_HANDLE", ""); 32 vi.stubEnv("FORUM_PASSWORD", ""); 33 34 const config = loadCliConfig(); 35 36 expect(config.missing).toContain("DATABASE_URL"); 37 expect(config.missing).toContain("FORUM_DID"); 38 expect(config.missing).toContain("FORUM_HANDLE"); 39 expect(config.missing).toContain("FORUM_PASSWORD"); 40 }); 41 42 it("defaults PDS_URL to https://bsky.social", () => { 43 vi.stubEnv("DATABASE_URL", "postgres://localhost/atbb"); 44 vi.stubEnv("FORUM_DID", "did:plc:test"); 45 vi.stubEnv("FORUM_HANDLE", "handle"); 46 vi.stubEnv("FORUM_PASSWORD", "pass"); 47 48 const config = loadCliConfig(); 49 50 expect(config.pdsUrl).toBe("https://bsky.social"); 51 expect(config.missing).toHaveLength(0); 52 }); 53});