import { describe, it, expect } from 'vitest'; import { readFileSync } from 'fs'; import { resolve } from 'path'; describe('Design Tokens (PRD Compliance)', () => { const cssContent = readFileSync(resolve(__dirname, '../../src/index.css'), 'utf-8'); it('should define --color-bg-page as #0a0a0f', () => { expect(cssContent).toContain('--color-bg-page: #0a0a0f'); }); it('should define --color-bg-input-bar as #16161e', () => { expect(cssContent).toContain('--color-bg-input-bar: #16161e'); }); it('should define --color-border-input-bar as #2a2a38', () => { expect(cssContent).toContain('--color-border-input-bar: #2a2a38'); }); it('should define --color-primary as #00b8e6', () => { expect(cssContent).toContain('--color-primary: #00b8e6'); }); it('should define --color-text-secondary as #8a8a9a', () => { expect(cssContent).toContain('--color-text-secondary: #8a8a9a'); }); it('should define --color-btn-send-disabled as #3a3a4a', () => { expect(cssContent).toContain('--color-btn-send-disabled: #3a3a4a'); }); it('should define --color-btn-send-active as #00b8e6', () => { expect(cssContent).toContain('--color-btn-send-active: #00b8e6'); }); it('should define --radius-input-bar as 20px', () => { expect(cssContent).toContain('--radius-input-bar: 20px'); }); it('should define --radius-send-btn as 50%', () => { expect(cssContent).toContain('--radius-send-btn: 50%'); }); it('should define --input-bar-max-width as 900px', () => { expect(cssContent).toContain('--input-bar-max-width: 900px'); }); it('should define --send-btn-size as 36px', () => { expect(cssContent).toContain('--send-btn-size: 36px'); }); it('should define --thumbnail-size as 80px', () => { expect(cssContent).toContain('--thumbnail-size: 80px'); }); it('should define --toolbar-btn-height as 32px', () => { expect(cssContent).toContain('--toolbar-btn-height: 32px'); }); it('should define --radius-dropdown as 12px', () => { expect(cssContent).toContain('--radius-dropdown: 12px'); }); it('should set page background on body', () => { expect(cssContent).toContain('background: var(--color-bg-page)'); }); it('should set overflow hidden on html/body', () => { expect(cssContent).toContain('overflow: hidden'); }); }); describe('InputBar CSS (PRD Compliance)', () => { const cssContent = readFileSync(resolve(__dirname, '../../src/components/InputBar.module.css'), 'utf-8'); it('should use InputBar background token', () => { expect(cssContent).toContain('var(--color-bg-input-bar)'); }); it('should use InputBar border token', () => { expect(cssContent).toContain('var(--color-border-input-bar)'); }); it('should use InputBar border-radius token', () => { expect(cssContent).toContain('var(--radius-input-bar)'); }); it('should use max-width token', () => { expect(cssContent).toContain('var(--input-bar-max-width)'); }); it('should have responsive styles for tablet (768-1023px)', () => { expect(cssContent).toContain('max-width: 90%'); }); it('should have responsive styles for mobile (<768px)', () => { expect(cssContent).toContain('max-width: 95%'); }); }); describe('Toolbar CSS (PRD Compliance)', () => { const cssContent = readFileSync(resolve(__dirname, '../../src/components/Toolbar.module.css'), 'utf-8'); it('should use send button size token', () => { expect(cssContent).toContain('var(--send-btn-size)'); }); it('should have send button border-radius 50%', () => { expect(cssContent).toContain('border-radius: 50%'); }); it('should use disabled color for send button', () => { expect(cssContent).toContain('var(--color-btn-send-disabled)'); }); it('should use active color for send button', () => { expect(cssContent).toContain('var(--color-btn-send-active)'); }); it('should have mobile responsive rule hiding labels', () => { expect(cssContent).toContain('display: none'); }); }); describe('Dropdown CSS (PRD Compliance)', () => { const cssContent = readFileSync(resolve(__dirname, '../../src/components/Dropdown.module.css'), 'utf-8'); it('should use dropdown background token', () => { expect(cssContent).toContain('var(--color-bg-dropdown)'); }); it('should use dropdown border-radius token', () => { expect(cssContent).toContain('var(--radius-dropdown)'); }); it('should have fade/slide animation transition', () => { expect(cssContent).toContain('transition'); expect(cssContent).toContain('opacity'); expect(cssContent).toContain('transform'); }); });