Files
kandev/apps/web/components/threads/threads-board.test-helpers.tsx
T

68 lines
2.0 KiB
TypeScript

import { cleanup, render as renderReact } from "@testing-library/react";
import type { ReactElement } from "react";
import { StateProvider } from "@/components/state-provider";
import { afterEach, vi } from "vitest";
const sessionMocks = vi.hoisted(() => {
const startedAt = "2026-08-27T10:00:00Z";
const updatedAt = "2026-08-27T12:00:00Z";
return {
startedAt,
updatedAt,
sessionLists: new Map<string, Array<Record<string, unknown>>>(),
sessionErrors: new Map<string, string | null>(),
sessionLoaded: new Map<string, boolean>(),
sessionLoaders: new Map<string, ReturnType<typeof vi.fn>>(),
useTaskSessions: vi.fn((taskId: string) => {
let sessions = sessionMocks.sessionLists.get(taskId);
if (!sessions) {
sessions = [
{
id: `session-${taskId}`,
task_id: taskId,
state: "RUNNING" as const,
is_primary: true,
started_at: sessionMocks.startedAt,
updated_at: sessionMocks.updatedAt,
},
];
sessionMocks.sessionLists.set(taskId, sessions);
}
return {
sessions,
isLoading: false,
isLoaded: sessionMocks.sessionLoaded.get(taskId) ?? true,
error: sessionMocks.sessionErrors.get(taskId) ?? null,
loadSessions: sessionMocks.sessionLoaders.get(taskId) ?? vi.fn(),
};
}),
};
});
export { sessionMocks };
vi.mock("./thread-conversation", () => ({
ThreadConversation: ({ sessionId }: { sessionId: string }) => (
<div data-testid={`thread-conversation-${sessionId}`} />
),
}));
vi.mock("@/hooks/use-task-sessions", () => ({
useTaskSessions: sessionMocks.useTaskSessions,
}));
export function render(element: ReactElement) {
return renderReact(element, { wrapper: StateProvider });
}
afterEach(() => {
cleanup();
vi.restoreAllMocks();
vi.unstubAllGlobals();
sessionMocks.useTaskSessions.mockClear();
sessionMocks.sessionLists.clear();
sessionMocks.sessionErrors.clear();
sessionMocks.sessionLoaded.clear();
sessionMocks.sessionLoaders.clear();
});