Files
kandev/apps/web/components/task/TaskBody.test.tsx
T
2026-05-16 20:07:57 +01:00

73 lines
2.5 KiB
TypeScript

/**
* Tests for TaskBody — the simple|advanced switcher and the URL-mode
* resolver that decides which slot to mount.
*/
import { describe, it, expect, afterEach } from "vitest";
import { render, screen, cleanup } from "@testing-library/react";
import { TaskBody, resolveTaskBodyMode } from "./TaskBody";
afterEach(cleanup);
describe("resolveTaskBodyMode", () => {
it("returns the default when no overrides are set", () => {
expect(resolveTaskBodyMode({}, "simple")).toBe("simple");
expect(resolveTaskBodyMode({}, "advanced")).toBe("advanced");
expect(resolveTaskBodyMode(null, "simple")).toBe("simple");
});
it("flag-style ?simple flips to simple even when default is advanced", () => {
expect(resolveTaskBodyMode({ simple: "" }, "advanced")).toBe("simple");
});
it("flag-style ?advanced flips to advanced even when default is simple", () => {
expect(resolveTaskBodyMode({ advanced: "" }, "simple")).toBe("advanced");
});
it("legacy ?mode=advanced still flips", () => {
expect(resolveTaskBodyMode({ mode: "advanced" }, "simple")).toBe("advanced");
expect(resolveTaskBodyMode({ mode: "simple" }, "advanced")).toBe("simple");
});
it("ignores unknown ?mode values and uses default", () => {
expect(resolveTaskBodyMode({ mode: "foo" }, "advanced")).toBe("advanced");
});
it("works with URLSearchParams", () => {
expect(resolveTaskBodyMode(new URLSearchParams("simple"), "advanced")).toBe("simple");
expect(resolveTaskBodyMode(new URLSearchParams("advanced"), "simple")).toBe("advanced");
expect(resolveTaskBodyMode(new URLSearchParams(""), "simple")).toBe("simple");
});
});
describe("TaskBody", () => {
it("renders the simple slot in simple mode", () => {
render(
<TaskBody
mode="simple"
simpleSlot={<div>simple-pane</div>}
advancedSlot={<div>advanced-pane</div>}
/>,
);
expect(screen.getByText("simple-pane")).toBeTruthy();
expect(screen.queryByText("advanced-pane")).toBeNull();
});
it("renders the advanced slot in advanced mode", () => {
render(
<TaskBody
mode="advanced"
simpleSlot={<div>simple-pane</div>}
advancedSlot={<div>advanced-pane</div>}
/>,
);
expect(screen.getByText("advanced-pane")).toBeTruthy();
expect(screen.queryByText("simple-pane")).toBeNull();
});
it("renders nothing when the chosen slot is missing", () => {
const { container } = render(<TaskBody mode="simple" />);
expect(container.textContent).toBe("");
});
});