import React from 'react';
import { mount } from 'enzyme';
import { act } from 'react-dom/test-utils';
import { injectIntl, IntlProvider } from '@edx/frontend-platform/i18n';
import FormGroup from '../FormGroup';
import PasswordField from '../PasswordField';
describe('FormGroup', () => {
const props = {
floatingLabel: 'Email',
helpText: ['Email field help text'],
name: 'email',
value: '',
handleFocus: jest.fn(),
};
it('should show help text on field focus', () => {
const formGroup = mount();
expect(formGroup.find('.pgn-transition-replace-group').find('div#email-1').exists()).toBeFalsy();
formGroup.find('input#email').simulate('focus');
expect(formGroup.find('.pgn-transition-replace-group').find('div#email-1').text()).toEqual('Email field help text');
});
});
describe('PasswordField', () => {
const IntlPasswordField = injectIntl(PasswordField);
let props = {};
beforeEach(() => {
props = {
floatingLabel: 'Password',
name: 'password',
value: 'password123',
handleFocus: jest.fn(),
};
});
it('should show/hide password on icon click', () => {
const passwordField = mount();
passwordField.find('button[aria-label="Show password"]').simulate('click');
expect(passwordField.find('input').prop('type')).toEqual('text');
passwordField.find('button[aria-label="Hide password"]').simulate('click');
expect(passwordField.find('input').prop('type')).toEqual('password');
});
it('should show password requirement tooltip on focus', async () => {
const passwordField = mount();
jest.useFakeTimers();
await act(async () => {
passwordField.find('input').simulate('focus');
jest.runAllTimers();
});
passwordField.update();
expect(passwordField.find('#password-requirement-left').exists()).toBeTruthy();
});
it('should show all password requirement checks as failed', async () => {
props = {
...props,
value: '',
};
jest.useFakeTimers();
const passwordField = mount();
await act(async () => {
passwordField.find('input').simulate('focus');
jest.runAllTimers();
});
passwordField.update();
expect(passwordField.find('#letter-check span').prop('className')).toEqual('pgn__icon mr-1');
expect(passwordField.find('#number-check span').prop('className')).toEqual('pgn__icon mr-1');
expect(passwordField.find('#characters-check span').prop('className')).toEqual('pgn__icon mr-1');
});
it('should update password requirement checks', async () => {
const passwordField = mount();
jest.useFakeTimers();
await act(async () => {
passwordField.find('input').simulate('focus');
jest.runAllTimers();
});
passwordField.update();
expect(passwordField.find('#letter-check span').prop('className')).toEqual('pgn__icon text-success mr-1');
expect(passwordField.find('#number-check span').prop('className')).toEqual('pgn__icon text-success mr-1');
expect(passwordField.find('#characters-check span').prop('className')).toEqual('pgn__icon text-success mr-1');
});
});