Files
2026-07-13 12:18:19 +08:00

33 lines
1.0 KiB
TypeScript

import type { TUI } from "@earendil-works/pi-tui";
import { afterEach, describe, expect, it, vi } from "vitest";
import { IdleStatus, RetryStatusIndicator } from "../src/modes/interactive/components/status-indicator.ts";
import { initTheme } from "../src/modes/interactive/theme/theme.ts";
describe("status indicators", () => {
afterEach(() => {
vi.useRealTimers();
});
it("keeps idle status at the same height as status indicators", () => {
const idleStatus = new IdleStatus();
const lines = idleStatus.render(20);
expect(lines).toHaveLength(2);
expect(lines).toEqual([" ".repeat(20), " ".repeat(20)]);
});
it("disposes retry countdown updates", () => {
initTheme("dark");
vi.useFakeTimers();
const requestRender = vi.fn();
const tui = { requestRender } as unknown as TUI;
const indicator = new RetryStatusIndicator(tui, 1, 3, 1000);
const callsBeforeDispose = requestRender.mock.calls.length;
indicator.dispose();
vi.advanceTimersByTime(2000);
expect(requestRender).toHaveBeenCalledTimes(callsBeforeDispose);
});
});