/** * UnifiedSurface Component Tests * * Tests for surface components in components/admin/UnifiedSurface */ import { describe, it, expect } from 'vitest'; import { render, screen } from '@testing-library/react'; import { UnifiedCard, UnifiedDivider, } from '@/components/admin/UnifiedSurface'; import { MantineProvider, createTheme } from '@mantine/core'; // Create a wrapper component with Mantine Provider function renderWithMantine(ui: React.ReactElement) { const theme = createTheme(); return render(ui, { wrapper: ({ children }) => ( {children} ), }); } describe('UnifiedCard', () => { it('should render card with children', () => { renderWithMantine( Card Content ); expect(screen.getByText('Card Content')).toBeInTheDocument(); }); it('should render with border by default', () => { renderWithMantine( With Border ); expect(screen.getByText('With Border')).toBeInTheDocument(); }); it('should render without border when withBorder is false', () => { renderWithMantine( No Border ); expect(screen.getByText('No Border')).toBeInTheDocument(); }); it('should render with no shadow by default', () => { renderWithMantine( No Shadow ); expect(screen.getByText('No Shadow')).toBeInTheDocument(); }); it('should render with custom shadow', () => { renderWithMantine( Small Shadow ); expect(screen.getByText('Small Shadow')).toBeInTheDocument(); }); it('should render with medium shadow', () => { renderWithMantine( Medium Shadow ); expect(screen.getByText('Medium Shadow')).toBeInTheDocument(); }); it('should render with large shadow', () => { renderWithMantine( Large Shadow ); expect(screen.getByText('Large Shadow')).toBeInTheDocument(); }); it('should render with medium padding by default', () => { renderWithMantine( Default Padding ); expect(screen.getByText('Default Padding')).toBeInTheDocument(); }); it('should render with custom padding - none', () => { renderWithMantine( No Padding ); expect(screen.getByText('No Padding')).toBeInTheDocument(); }); it('should render with custom padding - xs', () => { renderWithMantine( XS Padding ); expect(screen.getByText('XS Padding')).toBeInTheDocument(); }); it('should render with custom padding - sm', () => { renderWithMantine( SM Padding ); expect(screen.getByText('SM Padding')).toBeInTheDocument(); }); it('should render with custom padding - lg', () => { renderWithMantine( LG Padding ); expect(screen.getByText('LG Padding')).toBeInTheDocument(); }); it('should render with custom padding - xl', () => { renderWithMantine( XL Padding ); expect(screen.getByText('XL Padding')).toBeInTheDocument(); }); it('should render with hoverable prop', () => { renderWithMantine( Hoverable Card ); expect(screen.getByText('Hoverable Card')).toBeInTheDocument(); }); it('should accept custom style prop', () => { renderWithMantine( Custom Style ); expect(screen.getByText('Custom Style')).toBeInTheDocument(); }); it('should render with complex children', () => { renderWithMantine(

Title

Paragraph

); expect(screen.getByText('Title')).toBeInTheDocument(); expect(screen.getByText('Paragraph')).toBeInTheDocument(); expect(screen.getByText('Button')).toBeInTheDocument(); }); }); describe('UnifiedCard.Header', () => { it('should render header with children', () => { renderWithMantine( Header Content ); expect(screen.getByText('Header Content')).toBeInTheDocument(); }); it('should render with medium padding by default', () => { renderWithMantine( Default Padding ); expect(screen.getByText('Default Padding')).toBeInTheDocument(); }); it('should render with custom padding', () => { renderWithMantine( Small Padding ); expect(screen.getByText('Small Padding')).toBeInTheDocument(); }); it('should render with bottom border by default', () => { renderWithMantine( With Border ); expect(screen.getByText('With Border')).toBeInTheDocument(); }); it('should render without border when border is none', () => { renderWithMantine( No Border ); expect(screen.getByText('No Border')).toBeInTheDocument(); }); it('should render with top border when specified', () => { renderWithMantine( Top Border ); expect(screen.getByText('Top Border')).toBeInTheDocument(); }); }); describe('UnifiedCard.Body', () => { it('should render body with children', () => { renderWithMantine( Body Content ); expect(screen.getByText('Body Content')).toBeInTheDocument(); }); it('should render with medium padding by default', () => { renderWithMantine( Default Padding ); expect(screen.getByText('Default Padding')).toBeInTheDocument(); }); it('should render with custom padding', () => { renderWithMantine( Large Padding ); expect(screen.getByText('Large Padding')).toBeInTheDocument(); }); it('should render with no padding', () => { renderWithMantine( No Padding ); expect(screen.getByText('No Padding')).toBeInTheDocument(); }); it('should render with complex content', () => { renderWithMantine(

Paragraph 1

Paragraph 2

); expect(screen.getByText('Paragraph 1')).toBeInTheDocument(); expect(screen.getByText('Paragraph 2')).toBeInTheDocument(); expect(screen.getByText('List item')).toBeInTheDocument(); }); }); describe('UnifiedCard.Footer', () => { it('should render footer with children', () => { renderWithMantine( Footer Content ); expect(screen.getByText('Footer Content')).toBeInTheDocument(); }); it('should render with medium padding by default', () => { renderWithMantine( Default Padding ); expect(screen.getByText('Default Padding')).toBeInTheDocument(); }); it('should render with custom padding', () => { renderWithMantine( Small Padding ); expect(screen.getByText('Small Padding')).toBeInTheDocument(); }); it('should render with top border by default', () => { renderWithMantine( With Border ); expect(screen.getByText('With Border')).toBeInTheDocument(); }); it('should render without border when border is none', () => { renderWithMantine( No Border ); expect(screen.getByText('No Border')).toBeInTheDocument(); }); it('should render with bottom border when specified', () => { renderWithMantine( Bottom Border ); expect(screen.getByText('Bottom Border')).toBeInTheDocument(); }); it('should render with action buttons', () => { renderWithMantine( ); expect(screen.getByText('Cancel')).toBeInTheDocument(); expect(screen.getByText('Save')).toBeInTheDocument(); }); }); describe('UnifiedCard Composition', () => { it('should render complete card with header, body, and footer', () => { renderWithMantine( Card Header Card Body Card Footer ); expect(screen.getByText('Card Header')).toBeInTheDocument(); expect(screen.getByText('Card Body')).toBeInTheDocument(); expect(screen.getByText('Card Footer')).toBeInTheDocument(); }); it('should render card with multiple sections', () => { renderWithMantine( Title

Content 1

Content 2

); expect(screen.getByText('Title')).toBeInTheDocument(); expect(screen.getByText('Content 1')).toBeInTheDocument(); expect(screen.getByText('Content 2')).toBeInTheDocument(); expect(screen.getByText('Action')).toBeInTheDocument(); }); }); describe('UnifiedDivider', () => { it('should render divider', () => { renderWithMantine( ); // Divider should be in the document expect(document.querySelector('[role="separator"]')).toBeInTheDocument(); }); it('should render with soft variant by default', () => { renderWithMantine( ); expect(document.querySelector('[role="separator"]')).toBeInTheDocument(); }); it('should render with default variant', () => { renderWithMantine( ); expect(document.querySelector('[role="separator"]')).toBeInTheDocument(); }); it('should render with strong variant', () => { renderWithMantine( ); expect(document.querySelector('[role="separator"]')).toBeInTheDocument(); }); it('should render with custom margin', () => { renderWithMantine( ); expect(document.querySelector('[role="separator"]')).toBeInTheDocument(); }); it('should render between content', () => { renderWithMantine(

Above

Below

); expect(screen.getByText('Above')).toBeInTheDocument(); expect(screen.getByText('Below')).toBeInTheDocument(); }); });