import { render, screen } from '@testing-library/react';
import React from 'react';
import { describe, expect, it } from 'vitest';
import { MdLoadingSpinner } from '../MdLoadingSpinner';
describe('MdLoadingSpinner', () => {
describe('rendering', () => {
it('renders spinner', () => {
const { container } = render();
expect(container.querySelector('.md-loading-spinner')).toBeInTheDocument();
});
it('renders visually hidden loading text for screen readers', () => {
render();
// The text "Laster.." should be visually hidden but present for screen readers
expect(screen.getByText('Laster..')).toBeInTheDocument();
});
});
describe('positions', () => {
it('applies center position by default', () => {
const { container } = render();
expect(container.querySelector('.md-loading-spinner__container')).not.toHaveClass(
'md-loading-spinner__container--left',
);
expect(container.querySelector('.md-loading-spinner__container')).not.toHaveClass(
'md-loading-spinner__container--right',
);
});
it('applies left position', () => {
const { container } = render();
expect(container.querySelector('.md-loading-spinner__container--left')).toBeInTheDocument();
});
it('applies right position', () => {
const { container } = render();
expect(container.querySelector('.md-loading-spinner__container--right')).toBeInTheDocument();
});
});
describe('size', () => {
it('accepts custom size', () => {
const { container } = render();
const spinner = container.querySelector('.md-loading-spinner');
expect(spinner).toHaveAttribute('width', '48');
expect(spinner).toHaveAttribute('height', '48');
});
});
describe('props forwarding', () => {
it('merges custom className', () => {
const { container } = render();
expect(container.querySelector('.md-loading-spinner__container')).toHaveClass('custom-class');
});
it('forwards data-* attributes', () => {
render();
expect(screen.getByTestId('spinner')).toBeInTheDocument();
});
});
describe('accessibility', () => {
it('spinner icon is aria-hidden', () => {
const { container } = render();
expect(container.querySelector('.md-loading-spinner')).toHaveAttribute('aria-hidden', 'true');
});
});
});