import React from 'react';
import { render, screen } from '@testing-library/react';
import {
Card,
CardHeader,
CardTitle,
CardDescription,
CardContent,
CardFooter,
} from '../../../src/renderer/components/ui/Card';
describe('Card', () => {
it('renders with children', () => {
render(
Card content
);
expect(screen.getByText('Card content')).toBeInTheDocument();
});
it('applies default styles', () => {
render(Content);
const card = screen.getByTestId('card');
expect(card).toHaveClass('rounded-2xl', 'border', 'shadow-lg');
});
it('supports custom className', () => {
render(
Content
);
const card = screen.getByTestId('card');
expect(card).toHaveClass('custom-class');
expect(card).toHaveClass('rounded-2xl');
});
it('renders with complete structure', () => {
render(
Card Title
Card description
Card content
Card footer
);
expect(screen.getByText('Card Title')).toBeInTheDocument();
expect(screen.getByText('Card description')).toBeInTheDocument();
expect(screen.getByText('Card content')).toBeInTheDocument();
expect(screen.getByText('Card footer')).toBeInTheDocument();
});
});
describe('CardHeader', () => {
it('renders with children', () => {
render(
Title
);
expect(screen.getByText('Title')).toBeInTheDocument();
});
it('applies default styles', () => {
render(Header);
const header = screen.getByTestId('header');
expect(header).toHaveClass('grid', 'items-start', 'gap-1.5', 'px-6');
});
});
describe('CardTitle', () => {
it('renders as div element', () => {
render(Title);
const title = screen.getByText('Title');
expect(title.tagName).toBe('DIV');
});
it('applies default styles', () => {
render(Title);
const title = screen.getByText('Title');
expect(title).toHaveClass('leading-none', 'font-semibold');
});
it('supports custom className', () => {
render(Title);
const title = screen.getByText('Title');
expect(title).toHaveClass('custom-class');
});
});
describe('CardDescription', () => {
it('renders as div element', () => {
render(Description);
const description = screen.getByText('Description');
expect(description.tagName).toBe('DIV');
});
it('applies default styles', () => {
render(Description);
const description = screen.getByText('Description');
expect(description).toHaveClass('text-sm', 'text-muted-foreground');
});
});
describe('CardContent', () => {
it('renders with children', () => {
render(Content);
expect(screen.getByText('Content')).toBeInTheDocument();
});
it('applies default styles', () => {
render(Content);
const content = screen.getByTestId('content');
expect(content).toHaveClass('px-6');
});
});
describe('CardFooter', () => {
it('renders with children', () => {
render(Footer);
expect(screen.getByText('Footer')).toBeInTheDocument();
});
it('applies default styles', () => {
render(Footer);
const footer = screen.getByTestId('footer');
expect(footer).toHaveClass('flex', 'items-center', 'px-6');
});
it('supports custom className', () => {
render(
Footer
);
const footer = screen.getByTestId('footer');
expect(footer).toHaveClass('justify-end');
});
});