/**
* Tests for the Card components.
*/
import { describe, it, expect, vi } from 'vitest';
import { screen, fireEvent } from '@testing-library/react';
import { render } from '../utils';
import { Card, CardHeader, CardContent } from '../../components/Card';
describe('Card', () => {
it('renders children', () => {
render(Test Content);
expect(screen.getByText('Test Content')).toBeInTheDocument();
});
it('applies custom className', () => {
const { container } = render(Content);
expect(container.firstChild).toHaveClass('custom-class');
});
it('applies default styling classes', () => {
const { container } = render(Content);
expect(container.firstChild).toHaveClass('bg-bambu-dark-secondary');
expect(container.firstChild).toHaveClass('rounded-xl');
expect(container.firstChild).toHaveClass('border');
});
it('handles click events', () => {
const handleClick = vi.fn();
render(Clickable);
fireEvent.click(screen.getByText('Clickable'));
expect(handleClick).toHaveBeenCalledTimes(1);
});
it('handles context menu events', () => {
const handleContextMenu = vi.fn();
render(Right-clickable);
fireEvent.contextMenu(screen.getByText('Right-clickable'));
expect(handleContextMenu).toHaveBeenCalledTimes(1);
});
});
describe('CardHeader', () => {
it('renders children', () => {
render(Header Content);
expect(screen.getByText('Header Content')).toBeInTheDocument();
});
it('applies border styling', () => {
const { container } = render(Header);
expect(container.firstChild).toHaveClass('border-b');
expect(container.firstChild).toHaveClass('px-6');
expect(container.firstChild).toHaveClass('py-4');
});
it('applies custom className', () => {
const { container } = render(
Header
);
expect(container.firstChild).toHaveClass('custom-header');
});
});
describe('CardContent', () => {
it('renders children', () => {
render(Body Content);
expect(screen.getByText('Body Content')).toBeInTheDocument();
});
it('applies padding styling', () => {
const { container } = render(Content);
expect(container.firstChild).toHaveClass('p-6');
});
it('applies custom className', () => {
const { container } = render(
Content
);
expect(container.firstChild).toHaveClass('custom-content');
});
});
describe('Card composition', () => {
it('composes Card with Header and Content', () => {
render(
My Header
My Content
);
expect(screen.getByText('My Header')).toBeInTheDocument();
expect(screen.getByText('My Content')).toBeInTheDocument();
});
});