Files
pi-ask/tests/notifications.test.ts
T

69 lines
1.8 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import { DEFAULT_ASK_CONFIG } from "../src/config/defaults.ts";
import {
createQuestionWaitingNotification,
notifyQuestionWaiting,
} from "../src/notifications.ts";
test("notification payload uses question label before prompt", () => {
const payload = createQuestionWaitingNotification({
label: "Scope",
prompt: "What should we change?",
});
assert.deepEqual(payload, {
event: "question.waiting",
title: "pi ask",
message: "Question waiting: Scope",
});
});
test("notification payload falls back to prompt and compacts whitespace", () => {
const payload = createQuestionWaitingNotification({
label: "",
prompt: "What\nshould\twe change?",
});
assert.equal(payload.message, "Question waiting: What should we change?");
});
test("disabled notifications are skipped", async () => {
const attempts = await notifyQuestionWaiting(
{
...DEFAULT_ASK_CONFIG,
notifications: { channels: ["bell"], enabled: false },
},
createQuestionWaitingNotification({ label: "Scope", prompt: "Prompt" })
);
assert.deepEqual(attempts, [{ channel: "notifications", status: "skipped" }]);
});
test("command notification receives env and swallows failures", async () => {
const payload = createQuestionWaitingNotification({
label: "Scope",
prompt: "Prompt",
});
const attempts = await notifyQuestionWaiting(
{
...DEFAULT_ASK_CONFIG,
notifications: {
channels: [
{
command:
"node -e 'if (process.env.ASK_NOTIFY_MESSAGE !== \"Question waiting: Scope\") process.exit(7)'",
type: "command",
},
{ command: "node -e 'process.exit(3)'", type: "command" },
],
enabled: true,
},
},
payload
);
assert.equal(attempts[0]?.status, "attempted");
assert.equal(attempts[1]?.status, "failed");
});