import test from "node:test"; import assert from "node:assert/strict"; import os from "node:os"; import path from "node:path"; import { mkdtemp, rm } from "node:fs/promises"; let runtimeRoot = ""; let readState: (typeof import("../src/lib/boss-data"))["readState"]; let writeState: (typeof import("../src/lib/boss-data"))["writeState"]; let updateUserSettings: (typeof import("../src/lib/boss-data"))["updateUserSettings"]; let subscribeBossEvents: (typeof import("../src/lib/boss-events"))["subscribeBossEvents"]; async function setup() { if (runtimeRoot) return; runtimeRoot = await mkdtemp(path.join(os.tmpdir(), "boss-settings-events-")); process.env.BOSS_RUNTIME_ROOT = runtimeRoot; process.env.BOSS_STATE_FILE = path.join(runtimeRoot, "boss-state.json"); const [data, events] = await Promise.all([ import("../src/lib/boss-data.ts"), import("../src/lib/boss-events.ts"), ]); readState = data.readState; writeState = data.writeState; updateUserSettings = data.updateUserSettings; subscribeBossEvents = events.subscribeBossEvents; } async function resetSettingsState() { const state = await readState(); state.user.settings = { liveUpdates: true, showRiskBadges: true, confirmDangerousActions: true, preferredEntryPoint: "conversations", }; await writeState(state); } test.beforeEach(async () => { await setup(); await resetSettingsState(); }); test.after(async () => { if (runtimeRoot) { await rm(runtimeRoot, { recursive: true, force: true }); } }); test("updateUserSettings publishes settings refresh event", async () => { const events: Array<{ event: string }> = []; const unsubscribe = subscribeBossEvents((event) => { events.push({ event }); }); await updateUserSettings({ liveUpdates: false }); unsubscribe(); assert.equal(events.at(-1)?.event, "settings.updated"); });