44 lines
1.7 KiB
TypeScript
44 lines
1.7 KiB
TypeScript
import { describe, it, expect } from "vitest";
|
|
import { handleValidate } from "../../src/tools/validate.js";
|
|
import { ComponentRegistry } from "../../src/registry.js";
|
|
|
|
describe("pettyui.validate", () => {
|
|
const registry = new ComponentRegistry();
|
|
|
|
it("validates correct props", () => {
|
|
const result = handleValidate(registry, { component: "Dialog", schema: "dialogRoot", props: { open: true, modal: false } });
|
|
expect(result.valid).toBe(true);
|
|
expect(result.errors).toHaveLength(0);
|
|
});
|
|
|
|
it("rejects invalid props", () => {
|
|
const result = handleValidate(registry, { component: "Dialog", schema: "dialogRoot", props: { open: "yes" } });
|
|
expect(result.valid).toBe(false);
|
|
expect(result.errors.length).toBeGreaterThan(0);
|
|
});
|
|
|
|
it("validates empty props", () => {
|
|
const result = handleValidate(registry, { component: "Dialog", schema: "dialogRoot", props: {} });
|
|
expect(result.valid).toBe(true);
|
|
expect(result.errors).toHaveLength(0);
|
|
});
|
|
|
|
it("checks required parts present — missing Title", () => {
|
|
const result = handleValidate(registry, { component: "Dialog", parts: ["Root", "Content"] });
|
|
expect(result.valid).toBe(false);
|
|
expect(result.errors).toContain("Missing required part: Title");
|
|
});
|
|
|
|
it("passes when all required parts provided", () => {
|
|
const result = handleValidate(registry, { component: "Dialog", parts: ["Root", "Content", "Title"] });
|
|
expect(result.valid).toBe(true);
|
|
expect(result.errors).toHaveLength(0);
|
|
});
|
|
|
|
it("returns error for unknown component", () => {
|
|
const result = handleValidate(registry, { component: "FakeComponent" });
|
|
expect(result.valid).toBe(false);
|
|
expect(result.errors).toContain('Component "FakeComponent" not found');
|
|
});
|
|
});
|