Something went wrong. Try again.
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061import assert from "node:assert/strict";import test from "node:test";
import { loadConfig, parseDurationToMs } from "./config.ts";
const baseEnv = { ATPROTO_HANDLE: "test.example", ATPROTO_APP_PASSWORD: "hunter2", WEEKLY_NOTIFY_TIME: "07:30", WEEKLY_NOTIFY_DAY: "Monday", CHECK_INTERVAL: "5m",};
test("loads a full config", () => { const cfg = loadConfig({ ...baseEnv, SLACK_TOKEN: "xoxb-1", SLACK_CHANNEL: "#events", ENABLE_STDOUT: "true", }); assert.equal(cfg.atprotoHandle, "test.example"); assert.equal(cfg.weeklyNotifyDay, 1); assert.equal(cfg.weeklyNotifyHour, 7); assert.equal(cfg.weeklyNotifyMinute, 30); assert.equal(cfg.checkIntervalMs, 300_000); assert.equal(cfg.enableStdout, true); assert.equal(cfg.slackToken, "xoxb-1"); assert.equal(cfg.openMeetBaseUrl, "https://api.openmeet.net");});
test("optional fields default sensibly", () => { const cfg = loadConfig(baseEnv); assert.equal(cfg.slackToken, undefined); assert.equal(cfg.enableStdout, false); assert.equal(cfg.atprotoPdsUrl, undefined);});
test("missing required var throws", () => { const { ATPROTO_HANDLE: _, ...env } = baseEnv; assert.throws(() => loadConfig(env), /ATPROTO_HANDLE/);});
test("invalid day and time throw", () => { assert.throws(() => loadConfig({ ...baseEnv, WEEKLY_NOTIFY_DAY: "Funday" }), /WEEKLY_NOTIFY_DAY/); assert.throws( () => loadConfig({ ...baseEnv, WEEKLY_NOTIFY_TIME: "25:00" }), /WEEKLY_NOTIFY_TIME/, ); assert.throws(() => loadConfig({ ...baseEnv, WEEKLY_NOTIFY_TIME: "7:30" }), /WEEKLY_NOTIFY_TIME/);});
test("parseDuration handles Go-style durations", () => { assert.equal(parseDurationToMs("30s"), 30_000); assert.equal(parseDurationToMs("5m"), 300_000); assert.equal(parseDurationToMs("1h30m"), 5_400_000); assert.throws(() => parseDurationToMs("5"), /invalid duration/); assert.throws(() => parseDurationToMs("fast"), /invalid duration/); assert.throws(() => parseDurationToMs(""), /invalid duration/); assert.throws(() => parseDurationToMs("249ms"), /must be at least 250ms/);});