/**
* 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(
);
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(
);
expect(screen.getByText('Above')).toBeInTheDocument();
expect(screen.getByText('Below')).toBeInTheDocument();
});
});