Files
Announcements/server/test/settings.test.js
T

82 lines
2.4 KiB
JavaScript

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);
});