import { cleanup, render } from "@testing-library/react";
import { afterEach, expect, it } from "vitest";
import {
TaskSheetSelectionProvider,
useTaskSheetSelectionController,
} from "./task-sheet-selection-context";
import type { TaskSheetSelectionController } from "./session-task-switcher-sheet-selection";
afterEach(cleanup);
it("invalidates pending selection when workspace scope changes without replacing the controller", () => {
const controllers: TaskSheetSelectionController[] = [];
function Consumer() {
controllers.push(useTaskSheetSelectionController());
return null;
}
const view = render(
,
);
const token = controllers[0].beginSelection();
view.rerender(
,
);
expect(controllers[1]).toBe(controllers[0]);
expect(controllers[0].isCurrent(token)).toBe(false);
});
// @covers AC-UI-MOBILE-MENU-003.3
it("shares selection cancellation between pins and the task picker until their owner unmounts", () => {
const controllers: TaskSheetSelectionController[] = [];
function Consumer() {
controllers.push(useTaskSheetSelectionController());
return null;
}
const view = render(
,
);
expect(controllers[0]).toBe(controllers[1]);
const first = controllers[0].beginSelection();
const second = controllers[1].beginSelection();
expect(controllers[0].isCurrent(first)).toBe(false);
expect(controllers[0].isCurrent(second)).toBe(true);
view.unmount();
expect(controllers[0].isCurrent(second)).toBe(false);
});