import { render, screen } from '@testing-library/react' import { StepIndicator } from '../StepIndicator' const steps = [ { label: 'Account', description: 'Set up your account' }, { label: 'Profile', description: 'Complete your profile' }, { label: 'Review', description: 'Review and confirm' }, ] describe('StepIndicator', () => { it('renders all step labels', () => { render() expect(screen.getByText('Account')).toBeInTheDocument() expect(screen.getByText('Profile')).toBeInTheDocument() expect(screen.getByText('Review')).toBeInTheDocument() }) it('renders step numbers for non-completed steps', () => { render() // Step 1 is active (no check icon), steps 2 and 3 are upcoming expect(screen.getByText('2')).toBeInTheDocument() expect(screen.getByText('3')).toBeInTheDocument() }) it('renders as an ordered list', () => { render() expect(screen.getByRole('list')).toBeInTheDocument() expect(screen.getAllByRole('listitem')).toHaveLength(3) }) it('applies active styles to the current step label', () => { render() const profileLabel = screen.getByText('Profile') expect(profileLabel).toHaveClass('text-primary') }) it('applies completed styles to past step labels', () => { render() const accountLabel = screen.getByText('Account') expect(accountLabel).toHaveClass('text-gray-600') const profileLabel = screen.getByText('Profile') expect(profileLabel).toHaveClass('text-gray-600') }) it('applies upcoming styles to future step labels', () => { render() const reviewLabel = screen.getByText('Review') expect(reviewLabel).toHaveClass('text-gray-400') }) it('does not render a connector after the last step', () => { const { container } = render() // Connectors are h-0.5 divs between steps; should be n-1 = 2 connectors const connectors = container.querySelectorAll('.h-0\\.5') expect(connectors.length).toBe(steps.length - 1) }) it('completed step connectors have primary color', () => { const { container } = render() const connectors = container.querySelectorAll('.h-0\\.5') // Both connectors (between steps 1-2 and 2-3) should be completed connectors.forEach((connector) => { expect(connector).toHaveClass('bg-primary') }) }) it('incomplete step connectors have gray color', () => { const { container } = render() const connectors = container.querySelectorAll('.h-0\\.5') connectors.forEach((connector) => { expect(connector).toHaveClass('bg-gray-200') }) }) it('applies custom className', () => { const { container } = render( ) expect(container.firstChild).toHaveClass('my-wizard') }) it('renders correctly with a single step', () => { render() expect(screen.getByText('Only Step')).toBeInTheDocument() // No connector for a single step const { container } = render( ) expect(container.querySelectorAll('.h-0\\.5')).toHaveLength(0) }) it('renders with currentIndex at last step', () => { render() // "Review" should be active expect(screen.getByText('Review')).toHaveClass('text-primary') }) })