Files
kandev/apps/web/components/app-sidebar/sections/tasks-section.test.tsx
T
2026-06-11 13:44:52 +01:00

70 lines
2.0 KiB
TypeScript

import { cleanup, render, screen } from "@testing-library/react";
import { TooltipProvider } from "@kandev/ui/tooltip";
import type { ReactNode } from "react";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
const state = {
appSidebar: {
sectionExpanded: {
tasks: true,
},
},
workspaces: { activeId: "ws-1" as string | null },
kanban: { workflowId: "wf-1" as string | null },
sidebarViews: {
views: [{ id: "all", name: "All tasks" }],
activeViewId: "all",
draft: null,
},
toggleAppSidebarSection: vi.fn(),
setAppSidebarCollapsed: vi.fn(),
setSidebarActiveView: vi.fn(),
};
vi.mock("@/components/state-provider", () => ({
useAppStore: (selector: (s: typeof state) => unknown) => selector(state),
}));
vi.mock("@/components/task/task-session-sidebar", () => ({
TaskSessionSidebar: () => <div data-testid="task-sidebar" />,
}));
vi.mock("@/components/task/sidebar-filter/sidebar-filter-popover", () => ({
SidebarFilterPopover: ({ trigger }: { trigger: ReactNode }) => trigger,
}));
import { TasksSection } from "./tasks-section";
function renderSection() {
return render(
<TooltipProvider>
<TasksSection collapsed={false} />
</TooltipProvider>,
);
}
describe("TasksSection", () => {
beforeEach(() => {
state.appSidebar.sectionExpanded.tasks = true;
state.workspaces.activeId = "ws-1";
state.kanban.workflowId = "wf-1";
state.sidebarViews.views = [{ id: "all", name: "All tasks" }];
state.sidebarViews.activeViewId = "all";
state.sidebarViews.draft = null;
state.toggleAppSidebarSection.mockClear();
state.setAppSidebarCollapsed.mockClear();
state.setSidebarActiveView.mockClear();
});
afterEach(() => cleanup());
it("keeps the tasks view picker inline in the section header", () => {
renderSection();
const picker = screen.getByTestId("tasks-view-picker");
const header = screen.getByRole("button", { name: "Tasks" }).parentElement;
expect(header?.contains(picker)).toBe(true);
});
});