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');
});
});