Files
clawdbot/src/tui/tui-overlays.test.ts
2026-01-15 01:59:05 +00:00

61 lines
1.5 KiB
TypeScript

import type { Component } from "@mariozechner/pi-tui";
import { describe, expect, it, vi } from "vitest";
import { createOverlayHandlers } from "./tui-overlays.js";
class DummyComponent implements Component {
render() {
return ["dummy"];
}
invalidate() {}
}
describe("createOverlayHandlers", () => {
it("routes overlays through the TUI overlay stack", () => {
const showOverlay = vi.fn();
const hideOverlay = vi.fn();
const setFocus = vi.fn();
let open = false;
const host = {
showOverlay: (component: Component) => {
open = true;
showOverlay(component);
},
hideOverlay: () => {
open = false;
hideOverlay();
},
hasOverlay: () => open,
setFocus,
};
const { openOverlay, closeOverlay } = createOverlayHandlers(host, new DummyComponent());
const overlay = new DummyComponent();
openOverlay(overlay);
expect(showOverlay).toHaveBeenCalledWith(overlay);
closeOverlay();
expect(hideOverlay).toHaveBeenCalledTimes(1);
expect(setFocus).not.toHaveBeenCalled();
});
it("restores focus when closing without an overlay", () => {
const setFocus = vi.fn();
const host = {
showOverlay: vi.fn(),
hideOverlay: vi.fn(),
hasOverlay: () => false,
setFocus,
};
const fallback = new DummyComponent();
const { closeOverlay } = createOverlayHandlers(host, fallback);
closeOverlay();
expect(setFocus).toHaveBeenCalledWith(fallback);
});
});