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 main 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});