import { render, screen } from "@testing-library/react"; import { describe, expect, it } from "vitest"; import { Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue } from "./progress"; describe("Progress", () => { it("renders with data-slot='progress'", () => { render(); expect(screen.getByTestId("p")).toHaveAttribute("data-slot", "progress"); }); it("auto-renders track and indicator children", () => { const { container } = render(); expect(container.querySelector("[data-slot=progress-track]")).toBeInTheDocument(); expect(container.querySelector("[data-slot=progress-indicator]")).toBeInTheDocument(); }); it("forwards value attribute via aria-valuenow", () => { render(); expect(screen.getByTestId("p")).toHaveAttribute("aria-valuenow", "75"); }); it("supports custom children rendered before the track", () => { render( My Progress , ); expect(screen.getByText("My Progress")).toBeInTheDocument(); }); }); describe("ProgressLabel", () => { it("renders with data-slot='progress-label'", () => { render( Label , ); expect(screen.getByText("Label")).toHaveAttribute("data-slot", "progress-label"); }); }); describe("ProgressValue", () => { it("renders with data-slot='progress-value'", () => { render( , ); // The value text is rendered by base-ui — just verify the slot exists const { container } = render( , ); expect(container.querySelector("[data-slot=progress-value]")).toBeInTheDocument(); }); }); describe("ProgressTrack and ProgressIndicator", () => { it("can be rendered explicitly with custom classes", () => { const { container } = render( , ); expect(container.querySelectorAll("[data-slot=progress-track]")).toHaveLength(2); }); });