@johnmusans/arcadia-ui-style-engine
Version:
Shared style system logic and types for Arcadia UI components
114 lines (98 loc) • 2.97 kB
text/typescript
import { describe, expect, it } from "vitest";
import { createStyle } from "../../src/core";
import { generateRegistryBase } from "../../src/shadcn-registry/generators/base";
import { restoreStyleDefinitionDefaults } from "../../src/utils";
import { mockStyleDefinition } from "../fixtures/styles";
describe("generateRegistryBase", () => {
const baseUrl = "https://ui.example.com";
const styleName = "test-style";
const mockStyle = createStyle(mockStyleDefinition);
it("should generate a registry base with correct structure", () => {
const result = generateRegistryBase({
styleName,
baseUrl,
style: mockStyle,
});
expect(result).toMatchObject({
name: "base",
type: "registry:style",
extends: "none",
files: [],
});
expect(result.dependencies).toBeInstanceOf(Array);
expect(result.registryDependencies).toBeInstanceOf(Array);
});
it("should include original base dependencies", () => {
const result = generateRegistryBase({
styleName,
baseUrl,
style: mockStyle,
});
expect(result.dependencies).toContain("tailwind-variants");
expect(result.dependencies).toContain("react-aria-components");
expect(result.dependencies).toContain("tailwindcss-react-aria-components");
expect(result.dependencies).toContain("tw-animate-css");
});
it("should add lucide-react dependency when using lucide icons", () => {
const styleWithLucide = createStyle(
restoreStyleDefinitionDefaults({
name: "style-with-lucide",
description: null,
theme: {
colors: {
modes: {
light: {},
},
},
},
icons: {
library: "lucide",
},
variants: {},
}),
);
const result = generateRegistryBase({
styleName,
baseUrl,
style: styleWithLucide,
});
expect(result.dependencies).toContain("lucide-react");
});
it("should add @remixicon/react dependency when using remix icons", () => {
const remixStyle = createStyle(
restoreStyleDefinitionDefaults({
name: "style-with-remix",
theme: {
colors: {
modes: {
light: {},
},
},
},
icons: {
library: "remix",
},
description: null,
variants: {},
}),
);
const result = generateRegistryBase({
styleName,
baseUrl,
style: remixStyle,
});
expect(result.dependencies).toContain("@remixicon/react");
});
it("should update registry dependencies with correct base URL and style slug", () => {
const result = generateRegistryBase({
styleName,
baseUrl,
style: mockStyle,
});
expect(result.registryDependencies).toEqual([
`${baseUrl}/${styleName}/utils`,
`${baseUrl}/${styleName}/focus-styles`,
`${baseUrl}/${styleName}/theme`,
]);
});
});