PettyUI/packages/core/tests/schemas/simple-components.test.ts
2026-03-31 21:42:28 +07:00

43 lines
1.8 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { ButtonPropsSchema, ButtonMeta } from "../../src/components/button/button.props";
import { BadgeMeta } from "../../src/components/badge/badge.props";
import { AlertMeta } from "../../src/components/alert/alert.props";
import { SkeletonMeta } from "../../src/components/skeleton/skeleton.props";
import { LinkPropsSchema, LinkMeta } from "../../src/components/link/link.props";
import { TogglePropsSchema, ToggleMeta } from "../../src/components/toggle/toggle.props";
import { ProgressRootPropsSchema, ProgressMeta } from "../../src/components/progress/progress.props";
describe("Simple component schemas", () => {
it("Button schema validates", () => {
const validBtn = ButtonPropsSchema.safeParse({ type: "submit" });
const invalidBtn = ButtonPropsSchema.safeParse({ type: "invalid" });
expect(validBtn.success).toBe(true);
expect(invalidBtn.success).toBe(false);
});
it("Link schema validates", () => {
const result = LinkPropsSchema.safeParse({ href: "/about", external: true });
expect(result.success).toBe(true);
});
it("Toggle schema validates", () => {
const result = TogglePropsSchema.safeParse({ pressed: true, disabled: false });
expect(result.success).toBe(true);
});
it("Progress schema validates", () => {
const result = ProgressRootPropsSchema.safeParse({ value: 50, max: 100 });
expect(result.success).toBe(true);
});
it("all Meta objects have required fields", () => {
const metas = [ButtonMeta, BadgeMeta, AlertMeta, SkeletonMeta, LinkMeta, ToggleMeta, ProgressMeta];
for (const meta of metas) {
expect(meta.name).toBeTruthy();
expect(meta.description).toBeTruthy();
expect(meta.parts.length).toBeGreaterThan(0);
expect(meta.requiredParts.length).toBeGreaterThan(0);
}
});
});