Project Files
__tests__ / accounts.test.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const vitest_1 = require("vitest");
const accounts_1 = require("../accounts");
function makeCfg(overrides = {}) {
const defaults = {
account1Label: "Personal",
account1ImapHost: "imap.gmail.com",
account1ImapPort: 993,
account1User: "personal@gmail.com",
account1Password: "pass1",
account1SmtpHost: "smtp.gmail.com",
account1SmtpPort: 587,
account2Label: "Work",
account2ImapHost: "outlook.office365.com",
account2ImapPort: 993,
account2User: "work@company.com",
account2Password: "pass2",
account2SmtpHost: "smtp-mail.outlook.com",
account2SmtpPort: 587,
account3Label: "",
account3ImapHost: "",
account3ImapPort: 993,
account3User: "",
account3Password: "",
account3SmtpHost: "",
account3SmtpPort: 587,
};
const merged = { ...defaults, ...overrides };
return { get: (key) => merged[key] ?? "" };
}
// ── getConfiguredAccounts ────────────────────────────────────────────────────
(0, vitest_1.describe)("getConfiguredAccounts", () => {
(0, vitest_1.it)("returns both configured accounts", () => {
const accounts = (0, accounts_1.getConfiguredAccounts)(makeCfg());
(0, vitest_1.expect)(accounts).toHaveLength(2);
(0, vitest_1.expect)(accounts[0].label).toBe("Personal");
(0, vitest_1.expect)(accounts[1].label).toBe("Work");
});
(0, vitest_1.it)("returns empty array when nothing configured", () => {
const cfg = { get: () => "" };
(0, vitest_1.expect)((0, accounts_1.getConfiguredAccounts)(cfg)).toHaveLength(0);
});
(0, vitest_1.it)("skips account with missing host", () => {
const accounts = (0, accounts_1.getConfiguredAccounts)(makeCfg({ account1ImapHost: "" }));
(0, vitest_1.expect)(accounts).toHaveLength(1);
(0, vitest_1.expect)(accounts[0].label).toBe("Work");
});
(0, vitest_1.it)("skips account with missing user", () => {
const accounts = (0, accounts_1.getConfiguredAccounts)(makeCfg({ account2User: "" }));
(0, vitest_1.expect)(accounts).toHaveLength(1);
(0, vitest_1.expect)(accounts[0].label).toBe("Personal");
});
(0, vitest_1.it)("skips account with missing password", () => {
const accounts = (0, accounts_1.getConfiguredAccounts)(makeCfg({ account1Password: "" }));
(0, vitest_1.expect)(accounts).toHaveLength(1);
(0, vitest_1.expect)(accounts[0].slot).toBe(2);
});
(0, vitest_1.it)("sets smtp to null when smtpHost is blank", () => {
const accounts = (0, accounts_1.getConfiguredAccounts)(makeCfg({ account1SmtpHost: "" }));
(0, vitest_1.expect)(accounts[0].smtp).toBeNull();
});
(0, vitest_1.it)("includes smtp when smtpHost is set", () => {
const accounts = (0, accounts_1.getConfiguredAccounts)(makeCfg());
(0, vitest_1.expect)(accounts[0].smtp).not.toBeNull();
(0, vitest_1.expect)(accounts[0].smtp?.host).toBe("smtp.gmail.com");
});
(0, vitest_1.it)("uses 'Account N' as label when label is blank", () => {
const accounts = (0, accounts_1.getConfiguredAccounts)(makeCfg({ account1Label: "" }));
(0, vitest_1.expect)(accounts[0].label).toBe("Account 1");
});
(0, vitest_1.it)("correctly maps imap config fields", () => {
const accounts = (0, accounts_1.getConfiguredAccounts)(makeCfg());
(0, vitest_1.expect)(accounts[0].imap).toEqual({
host: "imap.gmail.com",
port: 993,
user: "personal@gmail.com",
password: "pass1",
});
});
});
// ── resolveAccount ───────────────────────────────────────────────────────────
(0, vitest_1.describe)("resolveAccount", () => {
(0, vitest_1.it)("blank returns first account", () => {
(0, vitest_1.expect)((0, accounts_1.resolveAccount)(makeCfg(), "").label).toBe("Personal");
});
(0, vitest_1.it)('"1" returns account 1', () => {
(0, vitest_1.expect)((0, accounts_1.resolveAccount)(makeCfg(), "1").label).toBe("Personal");
});
(0, vitest_1.it)('"2" returns account 2', () => {
(0, vitest_1.expect)((0, accounts_1.resolveAccount)(makeCfg(), "2").label).toBe("Work");
});
(0, vitest_1.it)("label match is case-insensitive", () => {
(0, vitest_1.expect)((0, accounts_1.resolveAccount)(makeCfg(), "work").label).toBe("Work");
(0, vitest_1.expect)((0, accounts_1.resolveAccount)(makeCfg(), "PERSONAL").label).toBe("Personal");
});
(0, vitest_1.it)('"default" returns first account', () => {
(0, vitest_1.expect)((0, accounts_1.resolveAccount)(makeCfg(), "default").label).toBe("Personal");
});
(0, vitest_1.it)("throws for unconfigured slot", () => {
(0, vitest_1.expect)(() => (0, accounts_1.resolveAccount)(makeCfg(), "3")).toThrow("Account 3 is not configured");
});
(0, vitest_1.it)("throws for unknown label", () => {
(0, vitest_1.expect)(() => (0, accounts_1.resolveAccount)(makeCfg(), "Nonexistent")).toThrow("not found");
});
(0, vitest_1.it)("throws when no accounts configured", () => {
const cfg = { get: () => "" };
(0, vitest_1.expect)(() => (0, accounts_1.resolveAccount)(cfg, "")).toThrow("No email accounts configured");
});
(0, vitest_1.it)("error message lists available accounts", () => {
(0, vitest_1.expect)(() => (0, accounts_1.resolveAccount)(makeCfg(), "Ghost")).toThrow("1 (Personal)");
});
});