import { describe, it, expect } from 'vitest' import { getDesignTokens } from '@/theme' describe('theme', () => { describe('getDesignTokens', () => { it('должен возвращать объект с palette, typography, shape и components для light mode', () => { const tokens = getDesignTokens('light') expect(tokens).toHaveProperty('palette') expect(tokens).toHaveProperty('typography') expect(tokens).toHaveProperty('shape') expect(tokens).toHaveProperty('components') }) it('должен возвращать объект с palette, typography, shape и components для dark mode', () => { const tokens = getDesignTokens('dark') expect(tokens).toHaveProperty('palette') expect(tokens).toHaveProperty('typography') expect(tokens).toHaveProperty('shape') expect(tokens).toHaveProperty('components') }) it('должен устанавливать правильный mode в palette', () => { const lightTokens = getDesignTokens('light') const darkTokens = getDesignTokens('dark') expect(lightTokens.palette.mode).toBe('light') expect(darkTokens.palette.mode).toBe('dark') }) it('должен использовать lightPalette для light mode', () => { const tokens = getDesignTokens('light') expect(tokens.palette.primary.main).toBe('#1395de') expect(tokens.palette.background.default).toBe('#f3f4f6') expect(tokens.palette.background.paper).toBe('#ffffff') }) it('должен использовать darkPalette для dark mode', () => { const tokens = getDesignTokens('dark') expect(tokens.palette.primary.main).toBe('#1395de') expect(tokens.palette.background.default).toBe('#0B0F19') expect(tokens.palette.background.paper).toBe('#111827') }) it('должен устанавливать fontFamily', () => { const tokens = getDesignTokens('light') expect(tokens.typography.fontFamily).toBe('"Inter", "Roboto", "Helvetica", "Arial", sans-serif') }) it('должен устанавливать fontWeight для заголовков', () => { const tokens = getDesignTokens('light') expect(tokens.typography.h1.fontWeight).toBe(700) expect(tokens.typography.h2.fontWeight).toBe(700) expect(tokens.typography.h3.fontWeight).toBe(600) expect(tokens.typography.h4.fontWeight).toBe(600) expect(tokens.typography.h5.fontWeight).toBe(600) expect(tokens.typography.h6.fontWeight).toBe(600) }) it('должен устанавливать textTransform none для кнопок', () => { const tokens = getDesignTokens('light') expect(tokens.typography.button.textTransform).toBe('none') expect(tokens.typography.button.fontWeight).toBe(600) }) it('должен устанавливать borderRadius 12', () => { const tokens = getDesignTokens('light') expect(tokens.shape.borderRadius).toBe(12) }) it('должен настраивать MuiCssBaseline для кастомных скроллбаров', () => { const lightTokens = getDesignTokens('light') const darkTokens = getDesignTokens('dark') expect(lightTokens.components.MuiCssBaseline).toBeDefined() expect(darkTokens.components.MuiCssBaseline).toBeDefined() // Проверяем что styleOverrides существуют expect(lightTokens.components.MuiCssBaseline.styleOverrides).toBeDefined() expect(darkTokens.components.MuiCssBaseline.styleOverrides).toBeDefined() }) it('должен настраивать MuiButton с borderRadius 8', () => { const tokens = getDesignTokens('light') expect(tokens.components.MuiButton.styleOverrides.root.borderRadius).toBe(8) expect(tokens.components.MuiButton.styleOverrides.root.boxShadow).toBe('none') }) it('должен настраивать MuiPaper без backgroundImage', () => { const tokens = getDesignTokens('light') expect(tokens.components.MuiPaper.styleOverrides.root.backgroundImage).toBe('none') }) it('должен настраивать MuiPaper с border в зависимости от mode', () => { const lightTokens = getDesignTokens('light') const darkTokens = getDesignTokens('dark') expect(lightTokens.components.MuiPaper.styleOverrides.elevation1.border).toBe('1px solid #e5e7eb') expect(darkTokens.components.MuiPaper.styleOverrides.elevation1.border).toBe('1px solid #374151') }) it('должен настраивать MuiOutlinedInput с правильными borderColor', () => { const lightTokens = getDesignTokens('light') const darkTokens = getDesignTokens('dark') expect(lightTokens.components.MuiOutlinedInput.styleOverrides.root['& .MuiOutlinedInput-notchedOutline'].borderColor).toBe('#e5e7eb') expect(darkTokens.components.MuiOutlinedInput.styleOverrides.root['& .MuiOutlinedInput-notchedOutline'].borderColor).toBe('#374151') }) it('должен настраивать MuiAppBar с backdropFilter', () => { const tokens = getDesignTokens('light') expect(tokens.components.MuiAppBar.styleOverrides.root.backdropFilter).toBe('blur(8px)') expect(tokens.components.MuiAppBar.styleOverrides.root.boxShadow).toBe('none') }) it('должен настраивать MuiTableRow без border у последнего элемента', () => { const tokens = getDesignTokens('light') expect(tokens.components.MuiTableRow.styleOverrides.root['&:last-child td'].borderBottom).toBe(0) }) }) })