import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
const MockRippleButton = ({
children,
onClick,
disabled,
variant,
size
}: {
children: React.ReactNode;
onClick?: () => void;
disabled?: boolean;
variant?: string;
size?: string;
}) => {
return (
);
};
jest.mock('framer-motion', () => ({
motion: {
div: ({ children, onClick }: { children: React.ReactNode; onClick?: () => void }) => (
{children}
),
},
AnimatePresence: ({ children }: { children: React.ReactNode }) => <>{children}>,
}));
describe('RippleButton', () => {
beforeEach(() => {
jest.clearAllMocks();
});
describe('Rendering', () => {
it('should render button', () => {
render(Click me);
const button = screen.getByRole('button', { name: /click me/i });
expect(button).toBeInTheDocument();
});
it('should render children', () => {
render(Test Button);
expect(screen.getByText('Test Button')).toBeInTheDocument();
});
it('should apply variant classes', () => {
render(Secondary);
const button = screen.getByRole('button');
expect(button).toHaveClass('secondary');
});
it('should apply size classes', () => {
render(Large);
const button = screen.getByRole('button');
expect(button).toHaveClass('lg');
});
});
describe('Functionality', () => {
it('should handle click events', () => {
const handleClick = jest.fn();
render(Click me);
const button = screen.getByRole('button');
fireEvent.click(button);
expect(handleClick).toHaveBeenCalled();
});
it('should be disabled when disabled prop is true', () => {
render(Disabled);
const button = screen.getByRole('button');
expect(button).toBeDisabled();
});
});
describe('Accessibility', () => {
it('should be focusable', () => {
render(Focus me);
const button = screen.getByRole('button');
expect(button).not.toHaveAttribute('tabindex', '-1');
});
});
});