import { describe, it, expect, vi } from 'vitest' import { renderWithProviders, screen, userEvent } from '../../test/utils' import ActionButton from '.' describe('ActionButton', () => { describe('Rendering', () => { it('renders with children text', () => { renderWithProviders(Click me) expect( screen.getByRole('button', { name: 'Click me' }) ).toBeInTheDocument() }) }) describe('Disabled State', () => { it('is disabled when disabled prop is true', () => { renderWithProviders(Disabled) const button = screen.getByRole('button') expect(button).toBeDisabled() }) it('does not trigger onClick when disabled', async () => { const handleClick = vi.fn() const user = userEvent.setup() renderWithProviders( Disabled ) const button = screen.getByRole('button') await user.click(button) expect(handleClick).not.toHaveBeenCalled() }) }) describe('Click Handling', () => { it('calls onClick when clicked', async () => { const handleClick = vi.fn() const user = userEvent.setup() renderWithProviders( Click me ) const button = screen.getByRole('button') await user.click(button) expect(handleClick).toHaveBeenCalledTimes(1) }) }) describe('Type Attribute', () => { it('has button type by default', () => { renderWithProviders(Default Type) const button = screen.getByRole('button') expect(button).toHaveAttribute('type', 'button') }) it('can have submit type', () => { renderWithProviders(Submit) const button = screen.getByRole('button') expect(button).toHaveAttribute('type', 'submit') }) }) describe('Accessibility', () => { it('is keyboard accessible', async () => { const handleClick = vi.fn() const user = userEvent.setup() renderWithProviders( Press me ) const button = screen.getByRole('button') button.focus() await user.keyboard('{Enter}') expect(handleClick).toHaveBeenCalledTimes(1) }) it('can be focused', () => { renderWithProviders(Focus me) const button = screen.getByRole('button') button.focus() expect(button).toHaveFocus() }) }) })