// Copyright (C) 2026 Danilo M. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as // published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // Run: node shared/test_notify_config.js // NotifyConfig.js is a QML library, so its .pragma line is stripped before // node evaluates it. const fs = require("fs"); const assert = require("assert"); const src = fs.readFileSync(__dirname + "/NotifyConfig.js", "utf8") .replace(/^\.pragma library$/m, ""); const C = new Function(src + "\nreturn { defaults, resolve, withheld };")(); // Nothing, or garbage, is the defaults. assert.deepStrictEqual(C.resolve(undefined), C.defaults()); assert.deepStrictEqual(C.resolve("x"), C.defaults()); // Partial merges; wrong types and bad values keep their defaults. const r = C.resolve({ timeouts: { low: 3, normal: "x" }, liveCap: 500, historyCap: 0, balloons: { corner: "middle", screen: "HDMI-A-1" }, dndPassCritical: false, muted: ["a", 3, "b"] }); assert.deepStrictEqual(r.timeouts, { low: 3, normal: 10, critical: 0 }); assert.strictEqual(r.liveCap, 100); assert.strictEqual(r.historyCap, 1); assert.deepStrictEqual(r.balloons, { screen: "HDMI-A-1", corner: "bottom-right" }); assert.strictEqual(r.dndPassCritical, false); assert.deepStrictEqual(r.muted, ["a", "b"]); // Timeouts above a day are out of range, as in the daemon: the default. assert.strictEqual(C.resolve({ timeouts: { critical: 100000 } }).timeouts.critical, 0); assert.strictEqual(C.resolve({ timeouts: { low: 86400 } }).timeouts.low, 86400); // Suppression: muted always, DND per dndPassCritical. const n = (app, urgency) => ({ app, urgency }); const cfg = C.resolve({ muted: ["spam"] }); assert.strictEqual(C.withheld(cfg, n("spam", "critical"), false), true); assert.strictEqual(C.withheld(cfg, n("ok", "normal"), false), false); assert.strictEqual(C.withheld(cfg, n("ok", "normal"), true), true); assert.strictEqual(C.withheld(cfg, n("ok", "critical"), true), false); assert.strictEqual(C.withheld(C.resolve({ dndPassCritical: false }), n("ok", "critical"), true), true); console.log("ok");