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