64 lines
1.9 KiB
TypeScript
64 lines
1.9 KiB
TypeScript
import { afterEach, describe, expect, it } from "vitest";
|
|
import { act, cleanup, render } from "@testing-library/react";
|
|
import type { DockviewApi } from "dockview-react";
|
|
import { StateProvider } from "@/components/state-provider";
|
|
import { defaultState } from "@/lib/state/default-state";
|
|
import { useDockviewStore } from "@/lib/state/dockview-store";
|
|
import type { TaskSession, TaskId } from "@/lib/types/http";
|
|
import { makeReorderingAutoSessionApi } from "./dockview-session-tabs.test-utils";
|
|
import { useAutoSessionTab } from "./dockview-session-tabs";
|
|
|
|
const TASK_ID = "task-1" as TaskId;
|
|
const ACTIVE_SESSION_ID = "session-a";
|
|
const SIBLING_SESSION_ID = "session-b";
|
|
|
|
function Harness() {
|
|
useAutoSessionTab(ACTIVE_SESSION_ID);
|
|
return null;
|
|
}
|
|
|
|
function renderHookWithHydratedSessions() {
|
|
const sessions = [ACTIVE_SESSION_ID, SIBLING_SESSION_ID].map((id) => ({ id }) as TaskSession);
|
|
|
|
return render(
|
|
<StateProvider
|
|
initialState={{
|
|
...defaultState,
|
|
tasks: {
|
|
...defaultState.tasks,
|
|
activeTaskId: TASK_ID,
|
|
activeSessionId: ACTIVE_SESSION_ID,
|
|
},
|
|
taskSessionsByTask: {
|
|
...defaultState.taskSessionsByTask,
|
|
itemsByTaskId: { [TASK_ID]: sessions },
|
|
},
|
|
}}
|
|
>
|
|
<Harness />
|
|
</StateProvider>,
|
|
);
|
|
}
|
|
|
|
afterEach(() => {
|
|
cleanup();
|
|
useDockviewStore.setState({ api: null });
|
|
});
|
|
|
|
describe("useAutoSessionTab", () => {
|
|
it("reconciles every hydrated session when Dockview becomes ready later", () => {
|
|
// @covers AC-UI-TASK-AGENT-TAB-RECONCILIATION-001.1
|
|
useDockviewStore.setState({ api: null });
|
|
renderHookWithHydratedSessions();
|
|
|
|
const { api } = makeReorderingAutoSessionApi();
|
|
act(() => {
|
|
useDockviewStore.setState({ api: api as DockviewApi });
|
|
});
|
|
|
|
expect(api.panels.map((panel) => panel.id)).toEqual(
|
|
expect.arrayContaining([`session:${ACTIVE_SESSION_ID}`, `session:${SIBLING_SESSION_ID}`]),
|
|
);
|
|
});
|
|
});
|