import { render, screen } from '@testing-library/react'
import { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } from '../card'
describe('Card Components', () => {
describe('Card', () => {
it('renders correctly with default props', () => {
render(Card content)
const card = screen.getByTestId('card')
expect(card).toBeInTheDocument()
expect(card).toHaveClass('rounded-lg')
expect(card).toHaveClass('border')
expect(card).toHaveClass('bg-card')
})
it('applies custom className', () => {
render(Content)
expect(screen.getByTestId('card')).toHaveClass('custom-card')
})
it('forwards ref correctly', () => {
const ref = jest.fn()
render(Content)
expect(ref).toHaveBeenCalled()
})
})
describe('CardHeader', () => {
it('renders correctly', () => {
render(Header content)
const header = screen.getByTestId('header')
expect(header).toBeInTheDocument()
expect(header).toHaveClass('flex')
expect(header).toHaveClass('flex-col')
expect(header).toHaveClass('space-y-1.5')
})
})
describe('CardTitle', () => {
it('renders correctly', () => {
render(Card Title)
const title = screen.getByTestId('title')
expect(title).toBeInTheDocument()
expect(title).toHaveClass('text-lg')
expect(title).toHaveClass('font-semibold')
expect(title).toHaveClass('leading-none')
expect(title).toHaveClass('tracking-tight')
})
})
describe('CardDescription', () => {
it('renders correctly', () => {
render(Card description)
const description = screen.getByTestId('description')
expect(description).toBeInTheDocument()
expect(description).toHaveClass('text-sm')
expect(description).toHaveClass('text-muted-foreground')
})
})
describe('CardContent', () => {
it('renders correctly', () => {
render(Card Content)
const content = screen.getByTestId('content')
expect(content).toBeInTheDocument()
expect(content).toHaveClass('pt-0')
})
})
describe('CardFooter', () => {
it('renders correctly', () => {
render(Card Footer)
const footer = screen.getByTestId('footer')
expect(footer).toBeInTheDocument()
expect(footer).toHaveClass('flex')
expect(footer).toHaveClass('items-center')
expect(footer).toHaveClass('pt-4')
})
})
describe('Complete Card Structure', () => {
it('renders full card structure correctly', () => {
render(
Test Title
Test Description
Test content
)
expect(screen.getByTestId('full-card')).toBeInTheDocument()
expect(screen.getByText('Test Title')).toBeInTheDocument()
expect(screen.getByText('Test Description')).toBeInTheDocument()
expect(screen.getByText('Test content')).toBeInTheDocument()
expect(screen.getByRole('button', { name: 'Action' })).toBeInTheDocument()
})
})
})