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%' });
});
});