Files
pi-ask/tests/dismiss-notice-behavior.test.ts
T

80 lines
1.6 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import { DEFAULT_ASK_CONFIG } from "../src/config/defaults.ts";
import { createInitialState } from "../src/state/create.ts";
import { moveOption, moveTab } from "../src/state/transitions.ts";
import { renderAskScreen } from "../src/ui/render.ts";
function mockEditor() {
return {
getText() {
return "";
},
render() {
return [];
},
} as never;
}
function plainTheme() {
return {
fg(_color: string, text: string) {
return text;
},
bg(_color: string, text: string) {
return text;
},
bold(text: string) {
return text;
},
} as never;
}
const notice =
"Unsaved ask answers or drafts. Press cancel/dismiss again to discard.";
test("dismiss notice stays visible on same tab and clears after tab change", () => {
const state = createInitialState({
questions: [
{
id: "q1",
label: "One",
prompt: "One",
options: [{ value: "a", label: "A" }],
},
{
id: "q2",
label: "Two",
prompt: "Two",
options: [{ value: "b", label: "B" }],
},
],
});
const config = {
...DEFAULT_ASK_CONFIG,
behaviour: {
...DEFAULT_ASK_CONFIG.behaviour,
confirmDismissWhenDirty: true,
},
};
const sameTabLines = renderAskScreen({
config,
footerNotice: notice,
state: moveOption(state, 1),
theme: plainTheme(),
width: 80,
editor: mockEditor(),
});
assert.equal(sameTabLines.join("\n").includes(notice), true);
const nextTabLines = renderAskScreen({
config,
state: moveTab(state, 1),
theme: plainTheme(),
width: 80,
editor: mockEditor(),
});
assert.equal(nextTabLines.join("\n").includes(notice), false);
});