const test = require("node:test"); const assert = require("node:assert/strict"); const { openDatabase } = require("../src/database"); const { runMigrations } = require("../src/database/migrate"); const { SettingsValidationError, createSettingsService, } = require("../src/settings/service"); function createService() { const database = openDatabase({ path: ":memory:" }); runMigrations(database); return { database, service: createSettingsService(database, { now: () => 2_000_000_000_000 }), }; } test("settings are persisted with the approved defaults", (t) => { const { database, service } = createService(); t.after(() => database.close()); assert.deepEqual(service.get(), { revision: 1, defaultDurationMs: 7000, defaultBackgroundMode: "blurred", defaultSolidBackgroundColor: "#000000", defaultBackgroundDarkened: false, defaultBlurPx: 20, crossfadeDurationMs: 1000, updatedAt: database.prepare("SELECT updated_at FROM app_settings").get() .updated_at, }); }); test("settings updates persist boolean darkening and increment revision", (t) => { const { database, service } = createService(); t.after(() => database.close()); const updated = service.update({ defaultBackgroundDarkened: true, defaultBlurPx: 24, }); assert.equal(updated.revision, 2); assert.equal(updated.defaultBackgroundDarkened, true); assert.equal(updated.defaultBlurPx, 24); assert.equal( database.prepare("SELECT default_background_darkened FROM app_settings").get() .default_background_darkened, 1, ); }); test("settings reject strength values, unknown fields, and invalid values", (t) => { const { database, service } = createService(); t.after(() => database.close()); const original = service.get(); assert.throws( () => service.update({ defaultBlurPx: 24, darkeningOverride: 0.25 }), (error) => error instanceof SettingsValidationError, ); assert.deepEqual(service.get(), original); assert.throws( () => service.update({ defaultBlurPx: 24, defaultBackgroundDarkened: 1 }), /must be a boolean/, ); assert.deepEqual(service.get(), original); assert.throws( () => service.update({ defaultDurationMs: 0 }), /positive integer/, ); assert.deepEqual(service.get(), original); assert.throws( () => service.update({ toString: "not a setting" }), /unknown fields/, ); assert.deepEqual(service.get(), original); });