import { describe, it, expect } from 'vitest'; import { render, screen } from '@testing-library/react'; import { PasswordStrengthIndicator } from './PasswordStrengthIndicator'; describe('PasswordStrengthIndicator', () => { it('should not render when password is empty', () => { const { container } = render(); expect(container.firstChild).toBeNull(); }); it('should display weak strength for short password', () => { render(); expect(screen.getByText('Force: Faible')).toBeInTheDocument(); }); it('should display weak strength for password with only lowercase', () => { render(); expect(screen.getByText('Force: Faible')).toBeInTheDocument(); }); it('should display weak strength for password with length >= 8 and mixed case', () => { render(); expect(screen.getByText('Force: Faible')).toBeInTheDocument(); }); it('should display medium strength for password with length >= 8, mixed case and numbers', () => { render(); expect(screen.getByText('Force: Moyen')).toBeInTheDocument(); }); it('should display strong strength for password with length >= 8, mixed case, numbers and special chars', () => { render(); expect(screen.getByText('Force: Fort')).toBeInTheDocument(); }); it('should display very strong strength for long password with all requirements', () => { render(); expect(screen.getByText('Force: Très fort')).toBeInTheDocument(); }); it('should display very strong strength for password with length >= 12 and all requirements', () => { render(); expect(screen.getByText('Force: Très fort')).toBeInTheDocument(); }); it('should render progress bar', () => { const { container } = render( , ); const progressBar = container.querySelector('.bg-gray-200'); expect(progressBar).toBeInTheDocument(); }); it('should render progress fill with correct width for weak password', () => { const { container } = render(); const progressFill = container.querySelector('.bg-red-500'); expect(progressFill).toBeInTheDocument(); expect(progressFill).toHaveStyle({ width: '25%' }); }); it('should render progress fill with correct width for medium password', () => { const { container } = render( , ); const progressFill = container.querySelector('.bg-yellow-500'); expect(progressFill).toBeInTheDocument(); expect(progressFill).toHaveStyle({ width: '50%' }); }); it('should render progress fill with correct width for strong password', () => { const { container } = render( , ); const progressFill = container.querySelector('.bg-green-500'); expect(progressFill).toBeInTheDocument(); expect(progressFill).toHaveStyle({ width: '75%' }); }); it('should render progress fill with correct width for very strong password', () => { const { container } = render( , ); const progressFill = container.querySelector('.bg-green-600'); expect(progressFill).toBeInTheDocument(); expect(progressFill).toHaveStyle({ width: '100%' }); }); });