Files
fusion/packages/dashboard/app/components/__tests__/Board.test.tsx
Dustin Byrne d42b98a2ab feat(KB-160): thread engineStopped prop to suppress agent-active indicator
- Derive engineStopped from globalPaused/enginePaused in App and pass through Board → Column → WorktreeGroup → TaskCard
- Guard isAgentActive in TaskCard with !engineStopped so the pulse animation stops when the engine is paused
- Update Board test to supply the new engineStopped prop
- Add TaskCard tests covering engineStopped=true, false, and undefined (backward compat)
- Add engineStopped to all intermediate component interfaces
2026-03-28 16:30:23 -04:00

56 lines
1.4 KiB
TypeScript

import { describe, it, expect, vi } from "vitest";
import { render, screen } from "@testing-library/react";
import { Board } from "../Board";
import { COLUMNS } from "@kb/core";
// Mock child components so we only test Board's own rendering
vi.mock("../Column", () => ({
Column: ({ column }: { column: string }) => (
<div data-testid={`column-${column}`} />
),
}));
const noop = () => {};
const noopAsync = () => Promise.resolve({} as any);
function renderBoard() {
return render(
<Board
tasks={[]}
maxConcurrent={2}
onMoveTask={noopAsync}
onOpenDetail={noop}
addToast={noop}
isCreating={false}
onCancelCreate={noop}
onCreateTask={noopAsync}
onNewTask={noop}
autoMerge={false}
onToggleAutoMerge={noop}
engineStopped={false}
/>,
);
}
describe("Board", () => {
it("renders a <main> element with class 'board'", () => {
renderBoard();
const main = screen.getByRole("main");
expect(main).toBeDefined();
expect(main.className).toContain("board");
});
it("renders with id='board' for scroll targeting", () => {
renderBoard();
const main = screen.getByRole("main");
expect(main.id).toBe("board");
});
it("renders all 5 columns", () => {
renderBoard();
for (const col of COLUMNS) {
expect(screen.getByTestId(`column-${col}`)).toBeDefined();
}
});
});