Files
HiveGrid-Wireframes/hivegrid-cloud/apps/web/app/application/ui/uiAdapters.test.ts
T

77 lines
3.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { buttonAdapterNames, buttonAdapters } from "@toolctrl/ui/buttons";
import { layoutAdapterNames, layoutAdapters } from "@toolctrl/ui/layout";
import { navigationAdapterNames, navigationAdapters } from "@toolctrl/ui/navigation";
describe("@toolctrl/ui button adapter contract", () => {
it("exposes the first available button adapter targets without importing React components", () => {
expect(buttonAdapterNames).toEqual(["Button", "buttonVariants"]);
expect(buttonAdapters).toEqual([
expect.objectContaining({
category: "buttons",
name: "Button",
status: "available",
source: "apps/web/app/components/ui/button.tsx",
implementation: "shadcn/radix",
packageExport: "@toolctrl/ui/buttons",
}),
expect.objectContaining({
category: "buttons",
name: "buttonVariants",
status: "available",
source: "apps/web/app/components/ui/button.tsx",
implementation: "shadcn/radix",
packageExport: "@toolctrl/ui/buttons",
}),
]);
});
});
describe("@toolctrl/ui shell and navigation adapter contracts", () => {
it("exposes available layout adapter targets without importing React components", () => {
expect(layoutAdapterNames).toEqual(["ShadcnSidebarLayout", "UiRegistry"]);
expect(layoutAdapters).toEqual([
expect.objectContaining({
category: "layout",
name: "ShadcnSidebarLayout",
status: "available",
source: "apps/web/app/components/layouts/sidebars/shadcn/ShadcnSidebarLayout.tsx",
implementation: "shell-layout",
packageExport: "@toolctrl/ui/layout",
}),
expect.objectContaining({
category: "layout",
name: "UiRegistry",
status: "available",
source: "apps/web/app/application/ui/uiRegistry.ts",
implementation: "agent-registry",
packageExport: "@toolctrl/ui/layout",
}),
]);
});
it("exposes available navigation adapter targets without importing React components", () => {
expect(navigationAdapterNames).toEqual([
"AppSidebar",
"AdminSidebar",
"DocsSidebar",
"NavMain",
"NavSecondary",
"NavQuickLinks",
"NavActions",
"SidebarPrimitives",
]);
expect(navigationAdapters).toEqual([
expect.objectContaining({ name: "AppSidebar", source: "apps/web/app/application/sidebar/AppSidebar.tsx" }),
expect.objectContaining({ name: "AdminSidebar", source: "apps/web/app/application/sidebar/AdminSidebar.tsx" }),
expect.objectContaining({ name: "DocsSidebar", source: "apps/web/app/application/sidebar/DocsSidebar.ts" }),
expect.objectContaining({ name: "NavMain", source: "apps/web/app/components/layouts/sidebars/shadcn/nav-main.tsx" }),
expect.objectContaining({ name: "NavSecondary", source: "apps/web/app/components/layouts/sidebars/shadcn/nav-secondary.tsx" }),
expect.objectContaining({ name: "NavQuickLinks", source: "apps/web/app/components/layouts/sidebars/shadcn/nav-quick-links.tsx" }),
expect.objectContaining({ name: "NavActions", source: "apps/web/app/components/layouts/sidebars/shadcn/nav-actions.tsx" }),
expect.objectContaining({ name: "SidebarPrimitives", source: "apps/web/app/components/ui/sidebar.tsx" }),
]);
expect(navigationAdapters.every((adapter) => adapter.status === "available" && adapter.packageExport === "@toolctrl/ui/navigation")).toBe(true);
});
});