open-design/apps/web/tests/components/DesignSystemsTab.test.tsx
Eli 18b947c25f
[codex] Land design system GitHub intake handoff (#2187)
* Add Claude-style design system workflow

* Merge design system workflow into main

* Restore design system workflow UI styles

* Fix design system setup scrolling

* Fix design system setup connector button

* Preserve connector auth link after popup block

* Simplify connected GitHub setup state

* Open generated design system workspace project

* Summarize design system auto prompt in chat

* Add bounded GitHub connector design intake

* Prefer path-scoped GitHub intake tools

* Restore branch GitHub design context intake

* Restore design system review workspace

* Restore design system manager tab

* Let design system workflow routes own details

* Open editable design systems as projects

* Restore design system workspace coverage

* Fix bounded GitHub connector intake

* Hide design system review while generating

* Suppress design system generation questions

* Constrain GitHub design intake to bounded command

* Tolerate oversized GitHub metadata during intake

* Rebuild daemon CLI when sources change

* Fallback when GitHub connector snapshots are rate limited

* Allow GitHub intake without Composio

* Use native GitHub auth for design intake

* Remove design system review group heading

* Improve design system extraction evidence

* Align design system scaffold with Claude output

* Add evidence inventory for design system intake

* Add local design system evidence intake

* Add design system package audit gate

* Allow auditing Claude Design reference packages

* Audit design system package content quality

* Migrate legacy design system artifacts

* Clean migrated design system artifacts

* Require modular design system UI kits

* Reject thin design system UI kits

* Prioritize core design evidence intake

* Require role-based design system UI kits

* Clean stale design system manifest references

* Require representative preserved design assets

* Warn on generic design system visuals

* Enforce design system quality warnings

* Audit connected design system UI kits

* Require mounted design system UI kits

* Require composed design system app shells

* Require runnable JSX design system kits

* Require browser globals for design system components

* Infer design system names from source URLs

* Require source examples in design system packages

* Bind preserved fonts in design system tokens

* Require skill frontmatter in design system packages

* Preserve build icons in design system packages

* Require real assets in brand previews

* Require substantive source examples

* Require product overview in design system README

* Require reusable UI kit README

* Require reusable design system skill docs

* Seed Claude-style UI kit entry contract

* Preserve runtime build assets in design packages

* Audit design system packages after generation

* Audit design system first-run output

* Audit source-backed preview cards

* Align design system UI kit scaffolds

* Materialize design evidence package artifacts

* Show project chat during design system setup

* Hand off design system setup to project chat

* Auto-repair design system audit failures

* Harden design system evidence preservation

* Tighten design system package guidance

* Add targeted design system repair guidance

* Bound design system audit auto repair

* Use connector statuses in design system setup

* Audit design system preview manifests

* Require README preview manifests for design systems

* Fix design system GitHub intake handoff

* Fix daemon prompt CI assertions
2026-05-19 14:30:17 +08:00

87 lines
2.3 KiB
TypeScript

// @vitest-environment jsdom
import { cleanup, fireEvent, render, screen } from '@testing-library/react';
import { afterEach, describe, expect, it, vi } from 'vitest';
import type { DesignSystemSummary } from '@open-design/contracts';
import { DesignSystemsTab } from '../../src/components/DesignSystemsTab';
vi.mock('../../src/providers/registry', async () => {
const actual = await vi.importActual<typeof import('../../src/providers/registry')>(
'../../src/providers/registry',
);
return {
...actual,
updateDesignSystemDraft: vi.fn(async () => null),
deleteDesignSystemDraft: vi.fn(async () => true),
};
});
afterEach(() => {
cleanup();
vi.restoreAllMocks();
});
const systems: DesignSystemSummary[] = [
{
id: 'user:acme',
title: 'Acme Design System',
category: 'Custom',
summary: 'Internal product system.',
surface: 'web',
source: 'user',
status: 'draft',
isEditable: true,
updatedAt: '2026-05-13T03:19:00.000Z',
},
{
id: 'linear',
title: 'Linear',
category: 'Productivity & SaaS',
summary: 'Quiet issue-tracker system.',
surface: 'web',
source: 'built-in',
status: 'published',
isEditable: false,
},
];
describe('DesignSystemsTab', () => {
it('surfaces user-created design systems in the gallery', () => {
render(
<DesignSystemsTab
systems={systems}
selectedId="user:acme"
onSelect={() => {}}
onPreview={() => {}}
onCreate={() => {}}
onOpenSystem={() => {}}
/>,
);
expect(screen.getByText('Create')).toBeTruthy();
expect(screen.getByText('Acme Design System')).toBeTruthy();
expect(screen.getByText('Linear')).toBeTruthy();
});
it('routes create and open actions to the dedicated design-system flow', () => {
const onCreate = vi.fn();
const onOpenSystem = vi.fn();
render(
<DesignSystemsTab
systems={systems}
selectedId={null}
onSelect={() => {}}
onPreview={() => {}}
onCreate={onCreate}
onOpenSystem={onOpenSystem}
/>,
);
fireEvent.click(screen.getByText('Create'));
expect(onCreate).toHaveBeenCalledOnce();
fireEvent.click(screen.getByText('Edit'));
expect(onOpenSystem).toHaveBeenCalledWith('user:acme');
});
});