import { renderHook } from '@testing-library/react'; import { describe, it, expect } from 'vitest'; import { usePasswordStrength } from './usePasswordStrength'; describe('usePasswordStrength', () => { it('returns null for an empty password', () => { const { result } = renderHook(() => usePasswordStrength('')); expect(result.current).toBeNull(); }); it('returns "weak" for passwords shorter than 6 characters', () => { const { result: r1 } = renderHook(() => usePasswordStrength('a')); expect(r1.current).toBe('weak'); const { result: r2 } = renderHook(() => usePasswordStrength('abcde')); expect(r2.current).toBe('weak'); }); it('returns "medium" for passwords between 6 and 9 characters', () => { const { result: r1 } = renderHook(() => usePasswordStrength('abcdef')); expect(r1.current).toBe('medium'); const { result: r2 } = renderHook(() => usePasswordStrength('abcdefghi')); expect(r2.current).toBe('medium'); }); it('returns "strong" for passwords of 10 characters or more', () => { const { result: r1 } = renderHook(() => usePasswordStrength('abcdefghij')); expect(r1.current).toBe('strong'); const { result: r2 } = renderHook(() => usePasswordStrength('a-very-long-and-secure-password-123') ); expect(r2.current).toBe('strong'); }); it('recomputes the strength when the password prop changes across re-renders', () => { const { result, rerender } = renderHook(({ password }) => usePasswordStrength(password), { initialProps: { password: '' }, }); expect(result.current).toBeNull(); rerender({ password: 'short' }); expect(result.current).toBe('weak'); rerender({ password: 'mediumpwd' }); expect(result.current).toBe('medium'); rerender({ password: 'a-very-strong-password' }); expect(result.current).toBe('strong'); rerender({ password: '' }); expect(result.current).toBeNull(); }); });