Files
my-pi/pi-notify/tests/parsers.test.ts

45 lines
1.7 KiB
TypeScript

import assert from "node:assert/strict";
import { describe, it } from "node:test";
import {
parseEnabled,
parseKittyVisibility,
parseMessageMax,
parseMessageSource,
parseMinDurationMs,
parseNotificationAction,
} from "../src/parsers.ts";
describe("parsers", () => {
it("parses message source including privacy mode", () => {
assert.equal(parseMessageSource("assistant"), "assistant");
assert.equal(parseMessageSource(" user "), "user");
assert.equal(parseMessageSource("none"), "none");
assert.equal(parseMessageSource("invalid"), "assistant");
});
it("parses and clamps numeric settings", () => {
assert.equal(parseMessageMax(undefined), 80);
assert.equal(parseMessageMax("12"), 12);
assert.equal(parseMessageMax("-1"), 0);
assert.equal(parseMessageMax("999"), 500);
assert.equal(parseMessageMax("nope"), 80);
assert.equal(parseMinDurationMs(undefined), 3_000);
assert.equal(parseMinDurationMs(" "), 3_000);
assert.equal(parseMinDurationMs("1.25"), 1_250);
assert.equal(parseMinDurationMs("9999"), 3_600_000);
});
it("uses fail-safe defaults for boolean and Kitty behavior settings", () => {
assert.equal(parseEnabled(undefined), true);
assert.equal(parseEnabled("off"), false);
assert.equal(parseEnabled("yes"), true);
assert.equal(parseKittyVisibility(undefined), "always");
assert.equal(parseKittyVisibility("always"), "always");
assert.equal(parseKittyVisibility("unfocused"), "unfocused");
assert.equal(parseKittyVisibility("invisible"), "invisible");
assert.equal(parseKittyVisibility("invalid"), "always");
assert.equal(parseNotificationAction("none"), "none");
assert.equal(parseNotificationAction("invalid"), "focus");
});
});