import { render, screen } from '@testing-library/react';
import React from 'react';
import { describe, expect, it } from 'vitest';
import { MdTooltip } from '../MdTooltip';
describe('MdTooltip', () => {
describe('rendering', () => {
it('renders children', () => {
render(
,
);
expect(screen.getByRole('button', { name: /Hover me/i })).toBeInTheDocument();
});
it('renders tooltip content (visible to screen readers)', () => {
render(
,
);
// Tooltip content appears in multiple places (visually hidden + portal)
const elements = screen.getAllByText('Helpful information');
expect(elements.length).toBeGreaterThan(0);
});
});
describe('modes', () => {
it('applies medium mode by default', () => {
const { baseElement } = render(
,
);
// Tooltip is rendered in a portal, so use baseElement
const tooltip = baseElement.querySelector('.md-tooltip');
expect(tooltip).toHaveClass('md-tooltip--medium');
});
it('applies small mode', () => {
const { baseElement } = render(
,
);
const tooltip = baseElement.querySelector('.md-tooltip');
expect(tooltip).toHaveClass('md-tooltip--small');
});
it('applies large mode', () => {
const { baseElement } = render(
,
);
const tooltip = baseElement.querySelector('.md-tooltip');
expect(tooltip).toHaveClass('md-tooltip--large');
});
});
describe('props forwarding', () => {
it('applies anchorClassName', () => {
const { container } = render(
,
);
expect(container.querySelector('.md-tooltip__anchor')).toHaveClass('custom-anchor');
});
it('applies tooltipClassName', () => {
const { baseElement } = render(
,
);
// Tooltip is rendered in a portal, so use baseElement
const tooltip = baseElement.querySelector('.md-tooltip');
expect(tooltip).toHaveClass('custom-tooltip');
});
it('forwards data-* attributes to anchor', () => {
render(
,
);
expect(screen.getByTestId('tooltip-anchor')).toBeInTheDocument();
});
});
describe('accessibility', () => {
it('provides visually hidden content for screen readers', () => {
render(
,
);
// The tooltip content appears in multiple places for accessibility
const elements = screen.getAllByText('Screen reader text');
expect(elements.length).toBeGreaterThan(0);
});
});
});