import { render } from '@fuels/jest'; import { useState } from 'react'; import unsafeList from '../../../public/unsafe-passwords.json'; import { PasswordDictionary } from '../../utils/constants'; import { passwordStrengthCalculator } from '../../utils/password-strength'; import { Stack } from '../Box/Stack'; import { Button } from '../Button'; import { InputPassword } from '../InputPassword'; import { PasswordStrength } from './PasswordStrength'; const strongPassword = '12345LF@ik&!'; const averagePassword = 'L@w2'; const weakPassword = '12345678'; describe('PasswordStrength', () => { it('should render a weak password', async () => { const { findByText } = render( , ); expect( PasswordDictionary[passwordStrengthCalculator(weakPassword, unsafeList)], ).toBe('Weak'); expect( await findByText( PasswordDictionary[ passwordStrengthCalculator(weakPassword, unsafeList) ], ), ).toBeDefined(); }); it('should render a weak password if password minimum length is 8', async () => { const { findByText } = render( , ); expect( PasswordDictionary[passwordStrengthCalculator(weakPassword, unsafeList)], ).toBe('Weak'); expect( await findByText( PasswordDictionary[ passwordStrengthCalculator(weakPassword, unsafeList) ], ), ).toBeDefined(); }); it('should render a average password', async () => { const { findByText } = render( , ); expect( PasswordDictionary[ passwordStrengthCalculator(averagePassword, unsafeList) ], ).toBe('Average'); expect( await findByText( PasswordDictionary[ passwordStrengthCalculator(averagePassword, unsafeList) ], ), ).toBeDefined(); }); it('should render a strong password', async () => { const { findByText } = render( , ); expect( PasswordDictionary[ passwordStrengthCalculator(strongPassword, unsafeList) ], ).toBe('Strong'); expect( await findByText( PasswordDictionary[ passwordStrengthCalculator(strongPassword, unsafeList) ], ), ).toBeDefined(); }); it('should focus input when user press tab', async () => { const WithInput = () => { const [password, setPassword] = useState(''); const [open, setOpen] = useState(false); return ( setOpen(true)} password={password} open={open} unsafeList={unsafeList} > setPassword(e.target.value)} onFocus={() => setOpen(true)} onBlur={() => setOpen(false)} value={password} placeholder="Type your password" /> ); }; const { user, findByPlaceholderText } = render(); // create test to make sure when user press tab, input is focused await user.tab(); const input = await findByPlaceholderText('Type your password'); expect(input).toHaveFocus(); }); it('should fill 1 levels as strength weak', async () => { const container = document.createElement('div'); render(, { container, }); const elements = container.querySelectorAll('[data-strength="weak"]'); expect(elements.length).toBe(1); }); it('should fill 2 levels as strength weak', async () => { const container = document.createElement('div'); render(, { container, }); const elements = container.querySelectorAll('[data-strength="average"]'); expect(elements.length).toBe(2); }); it('should fill all levels when strength strong', async () => { const container = document.createElement('div'); render(, { container, }); const elements = container.querySelectorAll('[data-strength="strong"]'); expect(elements.length).toBe(3); }); });