feature/pi-refactor
1/**
2 * Tests for Main Entry Point
3 *
4 * These are integration tests that verify the main application
5 * wiring and configuration loading.
6 */
7
8import { describe, it, expect, beforeEach, afterEach } from "vitest";
9import * as os from "os";
10
11describe("Main Application Configuration", () => {
12 const originalEnv = process.env;
13
14 beforeEach(() => {
15 // Reset environment for each test
16 process.env = { ...originalEnv };
17 });
18
19 afterEach(() => {
20 process.env = originalEnv;
21 });
22
23 describe("Environment Variable Validation", () => {
24 it("should require DANEEL_XMPP_JID", () => {
25 delete process.env.DANEEL_XMPP_JID;
26 process.env.DANEEL_XMPP_PASSWORD = "test";
27 process.env.DANEEL_OWNER_JID = "test@xmpp.sbr.pm";
28
29 // Config loading should fail without JID
30 expect(() => {
31 // We'll implement loadConfig() function
32 const jid = process.env.DANEEL_XMPP_JID;
33 if (!jid) throw new Error("DANEEL_XMPP_JID required");
34 }).toThrow();
35 });
36
37 it("should require DANEEL_XMPP_PASSWORD", () => {
38 process.env.DANEEL_XMPP_JID = "bot@xmpp.sbr.pm";
39 delete process.env.DANEEL_XMPP_PASSWORD;
40 process.env.DANEEL_OWNER_JID = "test@xmpp.sbr.pm";
41
42 expect(() => {
43 const password = process.env.DANEEL_XMPP_PASSWORD;
44 if (!password) throw new Error("DANEEL_XMPP_PASSWORD required");
45 }).toThrow();
46 });
47
48 it("should require DANEEL_OWNER_JID", () => {
49 process.env.DANEEL_XMPP_JID = "bot@xmpp.sbr.pm";
50 process.env.DANEEL_XMPP_PASSWORD = "test";
51 delete process.env.DANEEL_OWNER_JID;
52
53 expect(() => {
54 const ownerJid = process.env.DANEEL_OWNER_JID;
55 if (!ownerJid) throw new Error("DANEEL_OWNER_JID required");
56 }).toThrow();
57 });
58
59 it("should accept valid configuration", () => {
60 process.env.DANEEL_XMPP_JID = "bot@xmpp.sbr.pm";
61 process.env.DANEEL_XMPP_PASSWORD = "test";
62 process.env.DANEEL_OWNER_JID = "owner@xmpp.sbr.pm";
63
64 expect(() => {
65 const jid = process.env.DANEEL_XMPP_JID;
66 const password = process.env.DANEEL_XMPP_PASSWORD;
67 const ownerJid = process.env.DANEEL_OWNER_JID;
68 if (!jid || !password || !ownerJid) throw new Error("Config incomplete");
69 }).not.toThrow();
70 });
71 });
72
73 describe("Optional Configuration", () => {
74 it("should use default data directory if not specified", () => {
75 delete process.env.DANEEL_DATA_DIR;
76 const dataDir = process.env.DANEEL_DATA_DIR || "./data";
77 expect(dataDir).toBe("./data");
78 });
79
80 it("should use custom data directory if specified", () => {
81 process.env.DANEEL_DATA_DIR = "/custom/path";
82 const dataDir = process.env.DANEEL_DATA_DIR || "./data";
83 expect(dataDir).toBe("/custom/path");
84 });
85
86 it("should use default inbox path if not specified", () => {
87 delete process.env.DANEEL_INBOX_PATH;
88 const inboxPath = process.env.DANEEL_INBOX_PATH ||
89 `${os.homedir()}/desktop/org/inbox.org`;
90 expect(inboxPath).toContain("inbox.org");
91 });
92
93 it("should use custom inbox path if specified", () => {
94 process.env.DANEEL_INBOX_PATH = "/custom/inbox.org";
95 const inboxPath = process.env.DANEEL_INBOX_PATH ||
96 `${os.homedir()}/desktop/org/inbox.org`;
97 expect(inboxPath).toBe("/custom/inbox.org");
98 });
99
100 it("should default debug to false", () => {
101 delete process.env.DANEEL_DEBUG;
102 const debug = process.env.DANEEL_DEBUG === "true";
103 expect(debug).toBe(false);
104 });
105
106 it("should enable debug when set to true", () => {
107 process.env.DANEEL_DEBUG = "true";
108 const debug = process.env.DANEEL_DEBUG === "true";
109 expect(debug).toBe(true);
110 });
111 });
112});