63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
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");
|
|
});
|