Files
open-design/apps/web/tests/components/NewProjectPanel.test.tsx

73 lines
2.1 KiB
TypeScript

import { renderToStaticMarkup } from 'react-dom/server';
import { describe, expect, it, vi } from 'vitest';
import {
buildDesignSystemCreateSelection,
defaultDesignSystemSelection,
NewProjectPanel,
} from '../../src/components/NewProjectPanel';
import type { DesignSystemSummary, SkillSummary } from '../../src/types';
const skills: SkillSummary[] = [
{
id: 'prototype-skill',
name: 'Prototype',
description: 'Build prototypes',
mode: 'prototype',
surface: 'web',
previewType: 'html',
designSystemRequired: true,
defaultFor: ['prototype'],
triggers: [],
upstream: null,
hasBody: true,
examplePrompt: 'Build a prototype.',
},
];
const designSystems: DesignSystemSummary[] = [
{
id: 'clay',
title: 'Clay',
summary: 'Friendly tactile product UI.',
category: 'Product',
swatches: ['#f4efe7', '#25211d'],
},
];
describe('NewProjectPanel design system defaults', () => {
it('uses the configured default design system when it exists in the catalog', () => {
expect(defaultDesignSystemSelection('clay', designSystems)).toEqual(['clay']);
expect(defaultDesignSystemSelection('missing', designSystems)).toEqual([]);
expect(defaultDesignSystemSelection(null, designSystems)).toEqual([]);
});
it('shows the configured default design system as the active project selection', () => {
const markup = renderToStaticMarkup(
<NewProjectPanel
skills={skills}
designSystems={designSystems}
defaultDesignSystemId="clay"
templates={[]}
promptTemplates={[]}
onCreate={vi.fn()}
/>,
);
expect(markup).toContain('Clay');
expect(markup).toContain('Default');
expect(markup).not.toContain('Freeform');
});
it('keeps media project creation from inheriting a hidden design system pick', () => {
expect(buildDesignSystemCreateSelection(true, ['clay', 'bmw'])).toEqual({
primary: 'clay',
inspirations: ['bmw'],
});
expect(buildDesignSystemCreateSelection(false, ['clay', 'bmw'])).toEqual({
primary: null,
inspirations: [],
});
});
});