/**
* SyncStatusIndicator Component Tests
*/
import { render, screen } from '@testing-library/react';
import { SyncStatusIndicator } from '@/features/issues/components/SyncStatusIndicator';
import type { SyncStatus } from '@/features/issues/types';
describe('SyncStatusIndicator', () => {
const statuses: SyncStatus[] = ['synced', 'pending', 'conflict', 'error'];
it.each(statuses)('renders %s status correctly', (status) => {
render();
// Should have accessible label containing "Sync status"
const element = screen.getByRole('status');
expect(element).toHaveAttribute('aria-label', expect.stringContaining('Sync status'));
});
it('shows label when showLabel is true', () => {
render();
expect(screen.getByText('Synced')).toBeInTheDocument();
});
it('hides label by default', () => {
render();
expect(screen.queryByText('Synced')).not.toBeInTheDocument();
});
it('applies custom className', () => {
render();
const element = screen.getByRole('status');
expect(element).toHaveClass('custom-class');
});
it('shows spinning icon for pending status', () => {
const { container } = render();
const icon = container.querySelector('svg');
expect(icon).toHaveClass('animate-spin');
});
});