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(
,
);
expect(screen.getByText("My Progress")).toBeInTheDocument();
});
});
describe("ProgressLabel", () => {
it("renders with data-slot='progress-label'", () => {
render(
,
);
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);
});
});