mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-07-14 06:47:00 +10:00
6a01207b6b
Adds ~1000 tests to bring the previously-untested packages and apps under coverage: - packages/utils — string, color, date, file, level, locale, sanitize, field, html, network-icons, rate-limit, url, url-security, monorepo, resume/patch, resume/docx/link-utils, style helpers (~97% on the testable utility files) - packages/ui — 28 component test files plus the use-controlled-state, use-mobile, use-confirm, use-prompt hooks (95% statements) - packages/pdf — shared template helpers (filtering, columns, picture, metrics, section-links, page-size, rich-text-html, section-title) - packages/schema — resumeDataSchema, page, templates, default - packages/fonts — expanded coverage on font helpers - packages/ai — resume sanitize and extraction template - packages/api — resume-access-policy - apps/web — error-message, locale, theme, pwa, dialogs/store, and the resume/move-item / section-actions / make-section-item helpers Adds jsdom polyfills (ResizeObserver, IntersectionObserver, scrollIntoView, matchMedia) and an explicit React Testing Library cleanup hook to vitest.setup.ts so portal- and overlay-based components work without per-test setup.
64 lines
1.7 KiB
TypeScript
64 lines
1.7 KiB
TypeScript
import { render, screen } from "@testing-library/react";
|
|
import userEvent from "@testing-library/user-event";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
import { Toggle } from "./toggle";
|
|
|
|
describe("Toggle", () => {
|
|
it("renders with data-slot='toggle'", () => {
|
|
render(<Toggle data-testid="t">on</Toggle>);
|
|
expect(screen.getByTestId("t")).toHaveAttribute("data-slot", "toggle");
|
|
});
|
|
|
|
it("starts unpressed by default", () => {
|
|
render(<Toggle data-testid="t">on</Toggle>);
|
|
expect(screen.getByTestId("t").getAttribute("aria-pressed")).toBe("false");
|
|
});
|
|
|
|
it("can be controlled via pressed prop", () => {
|
|
render(
|
|
<Toggle data-testid="t" pressed>
|
|
on
|
|
</Toggle>,
|
|
);
|
|
expect(screen.getByTestId("t").getAttribute("aria-pressed")).toBe("true");
|
|
});
|
|
|
|
it("calls onPressedChange when clicked", async () => {
|
|
const onChange = vi.fn();
|
|
render(
|
|
<Toggle data-testid="t" onPressedChange={onChange}>
|
|
x
|
|
</Toggle>,
|
|
);
|
|
await userEvent.click(screen.getByTestId("t"));
|
|
expect(onChange).toHaveBeenCalledWith(true, expect.anything());
|
|
});
|
|
|
|
it.each([["default"], ["outline"]] as const)("renders variant=%s", (variant) => {
|
|
render(
|
|
<Toggle data-testid="t" variant={variant}>
|
|
x
|
|
</Toggle>,
|
|
);
|
|
expect(screen.getByTestId("t")).toBeInTheDocument();
|
|
});
|
|
|
|
it.each([["default"], ["sm"], ["lg"]] as const)("renders size=%s", (size) => {
|
|
render(
|
|
<Toggle data-testid="t" size={size}>
|
|
x
|
|
</Toggle>,
|
|
);
|
|
expect(screen.getByTestId("t")).toBeInTheDocument();
|
|
});
|
|
|
|
it("merges custom className", () => {
|
|
render(
|
|
<Toggle data-testid="t" className="my-custom">
|
|
x
|
|
</Toggle>,
|
|
);
|
|
expect(screen.getByTestId("t")).toHaveClass("my-custom");
|
|
});
|
|
});
|