import { describe, expect, it } from "vitest";
import {
ContentStatusBadge,
ContentStatusIcon,
ContentStatusLabel,
type ContentStatusState,
} from "../../src/components/ContentStatusBadge";
import { render } from "../utils/render";
const statuses: Array<{ state: ContentStatusState; label: string }> = [
{ state: "published", label: "Published" },
{ state: "draft", label: "Draft" },
{ state: "scheduled", label: "Scheduled" },
{ state: "archived", label: "Archived" },
{ state: "pendingChanges", label: "Pending changes" },
{ state: "private", label: "Private" },
];
describe("ContentStatusBadge", () => {
for (const { state, label } of statuses) {
it(`renders the ${state} state with its user-facing label`, async () => {
const screen = await render();
await expect.element(screen.getByText(label, { exact: true })).toBeVisible();
expect(screen.container.querySelector("svg[aria-hidden='true']")).not.toBeNull();
});
}
});
describe("ContentStatusLabel", () => {
it("renders the icon and label as one readable value", async () => {
const screen = await render();
await expect.element(screen.getByText("Pending changes", { exact: true })).toBeVisible();
const icon = screen.container.querySelector("svg[aria-hidden='true']");
expect(icon).not.toBeNull();
});
});
describe("ContentStatusIcon", () => {
for (const { state, label } of statuses) {
it(`gives the ${state} icon an accessible localized name`, async () => {
const screen = await render();
await expect.element(screen.getByRole("img", { name: label })).toBeVisible();
});
}
it("can be hidden when adjacent text already names the state", async () => {
const screen = await render();
expect(screen.container.querySelector("svg[aria-hidden='true']")).not.toBeNull();
expect(screen.container.querySelector("[role='img']")).toBeNull();
});
});