Mats Bosson 5c503ee9ef Card component
Compound API (Root/Header/Content/Footer/Title/Description) with data-scope/data-part attributes, CardPropsSchema, and CardMeta. 4 tests passing.
2026-03-29 20:51:36 +07:00

41 lines
1.4 KiB
TypeScript

import { render, screen } from "@solidjs/testing-library";
import { describe, expect, it } from "vitest";
import { Card } from "../../../src/components/card/index";
import { CardPropsSchema, CardMeta } from "../../../src/components/card/card.props";
describe("Card", () => {
it("renders with compound API", () => {
render(() => (
<Card>
<Card.Header>
<Card.Title>Title</Card.Title>
<Card.Description>Description</Card.Description>
</Card.Header>
<Card.Content>Body content</Card.Content>
<Card.Footer>Footer</Card.Footer>
</Card>
));
expect(screen.getByText("Title")).toBeTruthy();
expect(screen.getByText("Description")).toBeTruthy();
expect(screen.getByText("Body content")).toBeTruthy();
expect(screen.getByText("Footer")).toBeTruthy();
});
it("renders as div element", () => {
render(() => <Card data-testid="card"><Card.Content>Content</Card.Content></Card>);
expect(screen.getByTestId("card").tagName).toBe("DIV");
});
it("schema validates empty props", () => {
expect(CardPropsSchema.safeParse({}).success).toBe(true);
});
it("meta has all required fields", () => {
expect(CardMeta.name).toBe("Card");
expect(CardMeta.parts).toContain("Root");
expect(CardMeta.parts).toContain("Header");
expect(CardMeta.parts).toContain("Content");
expect(CardMeta.parts).toContain("Footer");
});
});