import { describe, it, expect } from 'vitest';
import { render, screen } from '@testing-library/react';
import {
Card,
CardHeader,
CardTitle,
CardDescription,
CardContent,
CardFooter,
} from '../card';
describe('Card', () => {
it('renders card with children', () => {
render(Card content);
expect(screen.getByText('Card content')).toBeInTheDocument();
});
it('applies custom className', () => {
render(Test);
expect(screen.getByText('Test')).toHaveClass('custom');
});
it('renders full card structure', () => {
render(
Title
Description
Content
Footer
);
expect(screen.getByText('Title')).toBeInTheDocument();
expect(screen.getByText('Description')).toBeInTheDocument();
expect(screen.getByText('Content')).toBeInTheDocument();
expect(screen.getByText('Footer')).toBeInTheDocument();
});
it('CardHeader renders with correct class', () => {
render(Header);
expect(screen.getByTestId('header')).toHaveClass(
'flex',
'flex-col',
'space-y-1.5'
);
});
it('CardTitle renders as heading', () => {
render(My Title);
const title = screen.getByText('My Title');
expect(title).toBeInTheDocument();
});
it('CardDescription renders with muted styling', () => {
render(Description text);
expect(screen.getByText('Description text')).toBeInTheDocument();
});
it('CardContent renders with correct padding', () => {
render(Content);
expect(screen.getByTestId('content')).toHaveClass('pt-0');
});
it('CardFooter renders with flex layout', () => {
render(Footer);
expect(screen.getByTestId('footer')).toHaveClass('flex', 'items-center');
});
});