import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
import { DefaultPageDot } from '../DefaultPageDot';
describe('DefaultPageDot', () => {
const mockOnClick = jest.fn();
beforeEach(() => {
mockOnClick.mockClear();
});
it('renders active dot', () => {
render();
const button = screen.getByRole('button');
expect(button).toBeInTheDocument();
});
it('renders inactive dot', () => {
render();
const button = screen.getByRole('button');
expect(button).toBeInTheDocument();
});
it('calls onClick when clicked', () => {
render();
const button = screen.getByRole('button');
fireEvent.click(button);
expect(mockOnClick).toHaveBeenCalledTimes(1);
});
it('renders multiple dots with different indices', () => {
const { rerender } = render(
);
expect(screen.getByRole('button')).toBeInTheDocument();
rerender();
expect(screen.getByRole('button')).toBeInTheDocument();
});
it('handles active state changes', () => {
const { rerender } = render(
);
const button = screen.getByRole('button');
expect(button).toBeInTheDocument();
rerender();
expect(button).toBeInTheDocument();
});
it('applies different styling for active vs inactive state', () => {
const { container, rerender } = render(
);
const inactiveButton = container.querySelector('button');
expect(inactiveButton).toBeInTheDocument();
rerender();
const activeButton = container.querySelector('button');
expect(activeButton).toBeInTheDocument();
});
it('renders as a button element', () => {
render();
const button = screen.getByRole('button');
expect(button.tagName).toBe('BUTTON');
});
it('passes correct index to onClick handler', () => {
const { rerender } = render(
);
const button = screen.getByRole('button');
fireEvent.click(button);
expect(mockOnClick).toHaveBeenCalledTimes(1);
rerender();
fireEvent.click(button);
expect(mockOnClick).toHaveBeenCalledTimes(2);
});
it('is focusable for keyboard navigation', () => {
render();
const button = screen.getByRole('button');
button.focus();
expect(document.activeElement).toBe(button);
});
});