| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import { describe, it, expect } from "vitest";
- import React from "react";
- import { createRendererFromCatalog } from "./renderer";
- // Mock catalog object that matches the Catalog interface
- const mockCatalog = {
- name: "test",
- componentNames: ["text", "button"],
- actionNames: [],
- functionNames: [],
- validation: "strict" as const,
- components: {},
- actions: {},
- functions: {},
- elementSchema: {} as never,
- specSchema: {} as never,
- hasComponent: () => true,
- hasAction: () => false,
- hasFunction: () => false,
- validateElement: () => ({ success: true }),
- validateSpec: () => ({ success: true }),
- };
- describe("createRendererFromCatalog", () => {
- it("creates a React component from catalog and registry", () => {
- const registry = {
- text: ({ element }: { element: { props: { content: string } } }) =>
- React.createElement("span", null, element.props.content),
- button: ({ element }: { element: { props: { label: string } } }) =>
- React.createElement("button", null, element.props.label),
- };
- const CatalogRenderer = createRendererFromCatalog(mockCatalog, registry);
- expect(typeof CatalogRenderer).toBe("function");
- });
- it("returned component renders null for null spec", () => {
- const registry = {
- text: () => React.createElement("span"),
- };
- const CatalogRenderer = createRendererFromCatalog(mockCatalog, registry);
- // The component should handle null spec gracefully
- const element = React.createElement(CatalogRenderer, { spec: null });
- expect(element).toBeDefined();
- });
- it("returned component accepts loading prop", () => {
- const registry = {
- text: () => React.createElement("span"),
- };
- const CatalogRenderer = createRendererFromCatalog(mockCatalog, registry);
- const element = React.createElement(CatalogRenderer, {
- spec: null,
- loading: true,
- });
- expect(element.props.loading).toBe(true);
- });
- it("returned component accepts fallback prop", () => {
- const registry = {
- text: () => React.createElement("span"),
- };
- const Fallback = () =>
- React.createElement("div", null, "Unknown component");
- const CatalogRenderer = createRendererFromCatalog(mockCatalog, registry);
- const element = React.createElement(CatalogRenderer, {
- spec: null,
- fallback: Fallback,
- });
- expect(element.props.fallback).toBe(Fallback);
- });
- });
|