import React from 'react'; import { describe, it, expect } from 'vitest'; import { render, screen, waitFor } from '@testing-library/react'; import { AuthWorkflowMockup } from './AuthWorkflowMockup'; describe('AuthWorkflowMockup', () => { describe('rendering', () => { it('should render workflow steps', async () => { render(); await waitFor(() => { expect(screen.getByText('Create Account')).toBeInTheDocument(); expect(screen.getByText('Link iRacing')).toBeInTheDocument(); expect(screen.getByText('Configure Profile')).toBeInTheDocument(); expect(screen.getByText('Join Leagues')).toBeInTheDocument(); expect(screen.getByText('Start Racing')).toBeInTheDocument(); }); }); it('should render step descriptions', async () => { render(); await waitFor(() => { expect(screen.getByText('Sign up with email or connect iRacing')).toBeInTheDocument(); expect(screen.getByText('Connect your iRacing profile for stats')).toBeInTheDocument(); expect(screen.getByText('Set up your racing preferences')).toBeInTheDocument(); expect(screen.getByText('Find and join competitive leagues')).toBeInTheDocument(); expect(screen.getByText('Compete and track your progress')).toBeInTheDocument(); }); }); it('should render all 5 steps', async () => { render(); await waitFor(() => { const steps = screen.getAllByText(/Create Account|Link iRacing|Configure Profile|Join Leagues|Start Racing/); expect(steps).toHaveLength(5); }); }); it('should render step numbers', async () => { render(); await waitFor(() => { expect(screen.getByText('Create Account')).toBeInTheDocument(); }); }); }); describe('accessibility', () => { it('should have proper workflow semantics', async () => { render(); await waitFor(() => { expect(screen.getByText('Create Account')).toBeInTheDocument(); expect(screen.getByText('Link iRacing')).toBeInTheDocument(); }); }); it('should maintain proper reading order', async () => { render(); await waitFor(() => { const steps = screen.getAllByText(/Create Account|Link iRacing|Configure Profile|Join Leagues|Start Racing/); expect(steps[0]).toHaveTextContent('Create Account'); expect(steps[1]).toHaveTextContent('Link iRacing'); expect(steps[2]).toHaveTextContent('Configure Profile'); expect(steps[3]).toHaveTextContent('Join Leagues'); expect(steps[4]).toHaveTextContent('Start Racing'); }); }); }); describe('edge cases', () => { it('should handle component without props', async () => { render(); await waitFor(() => { expect(screen.getByText('Create Account')).toBeInTheDocument(); }); }); it('should handle re-rendering', async () => { const { rerender } = render(); await waitFor(() => { expect(screen.getByText('Create Account')).toBeInTheDocument(); }); rerender(); await waitFor(() => { expect(screen.getByText('Create Account')).toBeInTheDocument(); }); }); }); describe('visual states', () => { it('should show complete workflow', async () => { render(); await waitFor(() => { expect(screen.getByText('Create Account')).toBeInTheDocument(); expect(screen.getByText('Link iRacing')).toBeInTheDocument(); expect(screen.getByText('Configure Profile')).toBeInTheDocument(); expect(screen.getByText('Join Leagues')).toBeInTheDocument(); expect(screen.getByText('Start Racing')).toBeInTheDocument(); }); }); it('should show step descriptions', async () => { render(); await waitFor(() => { expect(screen.getByText('Sign up with email or connect iRacing')).toBeInTheDocument(); expect(screen.getByText('Connect your iRacing profile for stats')).toBeInTheDocument(); expect(screen.getByText('Set up your racing preferences')).toBeInTheDocument(); expect(screen.getByText('Find and join competitive leagues')).toBeInTheDocument(); expect(screen.getByText('Compete and track your progress')).toBeInTheDocument(); }); }); it('should show intent indicators', async () => { render(); await waitFor(() => { expect(screen.getByText('Create Account')).toBeInTheDocument(); expect(screen.getByText('Link iRacing')).toBeInTheDocument(); expect(screen.getByText('Configure Profile')).toBeInTheDocument(); expect(screen.getByText('Join Leagues')).toBeInTheDocument(); expect(screen.getByText('Start Racing')).toBeInTheDocument(); }); }); }); describe('component structure', () => { it('should use WorkflowMockup component', async () => { render(); await waitFor(() => { expect(screen.getByText('Create Account')).toBeInTheDocument(); }); }); it('should pass correct step data', async () => { render(); const steps = [ { title: 'Create Account', description: 'Sign up with email or connect iRacing' }, { title: 'Link iRacing', description: 'Connect your iRacing profile for stats' }, { title: 'Configure Profile', description: 'Set up your racing preferences' }, { title: 'Join Leagues', description: 'Find and join competitive leagues' }, { title: 'Start Racing', description: 'Compete and track your progress' }, ]; for (const step of steps) { await waitFor(() => { expect(screen.getByText(step.title)).toBeInTheDocument(); expect(screen.getByText(step.description)).toBeInTheDocument(); }); } }); }); });