import React from 'react'; import { render, screen } from '@testing-library/react'; import { Spinner } from '../../../src/renderer/components/ui/Spinner'; describe('Spinner', () => { it('renders correctly', () => { render(); const spinner = screen.getByRole('status'); expect(spinner).toBeInTheDocument(); }); it('has accessible label', () => { render(); const spinner = screen.getByRole('status'); expect(spinner).toHaveAttribute('aria-label', 'Loading'); }); it('supports custom aria-label', () => { render(); const spinner = screen.getByRole('status'); expect(spinner).toHaveAttribute('aria-label', 'Processing request'); }); it('applies default size', () => { render(); const spinner = screen.getByRole('status'); expect(spinner).toHaveClass('w-4', 'h-4'); }); it('supports different sizes', () => { const { rerender } = render(); let spinner = screen.getByRole('status'); expect(spinner).toHaveClass('w-3', 'h-3'); rerender(); spinner = screen.getByRole('status'); expect(spinner).toHaveClass('w-4', 'h-4'); rerender(); spinner = screen.getByRole('status'); expect(spinner).toHaveClass('w-6', 'h-6'); rerender(); spinner = screen.getByRole('status'); expect(spinner).toHaveClass('w-8', 'h-8'); }); it('applies default color', () => { render(); const spinner = screen.getByRole('status'); expect(spinner).toHaveClass('text-primary'); }); it('supports different colors', () => { const { rerender } = render(); let spinner = screen.getByRole('status'); expect(spinner).toHaveClass('text-primary'); rerender(); spinner = screen.getByRole('status'); expect(spinner).toHaveClass('text-secondary'); rerender(); spinner = screen.getByRole('status'); expect(spinner).toHaveClass('text-accent'); rerender(); spinner = screen.getByRole('status'); expect(spinner).toHaveClass('text-white'); rerender(); spinner = screen.getByRole('status'); expect(spinner).toHaveClass('text-current'); }); it('has animation class', () => { render(); const spinner = screen.getByRole('status'); expect(spinner).toHaveClass('animate-spin'); }); it('supports custom className', () => { render(); const spinner = screen.getByRole('status'); expect(spinner).toHaveClass('custom-class'); }); it('renders with screen reader only text', () => { render(); const srText = screen.getByText('Loading...'); expect(srText).toHaveClass('sr-only'); }); it('supports custom screen reader text', () => { render(); expect(screen.getByText('Please wait')).toBeInTheDocument(); }); it('renders inline by default', () => { render(); const spinner = screen.getByRole('status'); expect(spinner).toHaveClass('inline-block'); }); it('can be centered', () => { render(); const container = screen.getByTestId('spinner-container'); expect(container).toHaveClass('flex', 'justify-center', 'items-center'); }); });