UNPKG

@brightlayer-ui/react-native-auth-workflow

Version:

Re-usable workflow components for Authentication and Registration within Eaton applications.

142 lines (141 loc) 6.54 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import React from 'react'; import '@testing-library/jest-dom'; import '@testing-library/jest-native/extend-expect'; import { cleanup, render, screen, fireEvent, waitFor } from '@testing-library/react-native'; import { CreatePasswordScreen } from '../../screens'; import { RegistrationContextProvider } from '../../contexts'; import { RegistrationWorkflow } from '../../components'; import { registrationContextProviderProps } from '../../testUtils'; import { PaperProvider } from 'react-native-paper'; const passwordRequirements = [ { description: 'Check 1', regex: /^.{3,5}$/, }, { description: 'Check 2', regex: /[a-z]+/, }, ]; afterEach(cleanup); describe('Create Password Screen', () => { let mockOnNext; let mockOnPrevious; afterEach(() => { jest.clearAllMocks(); }); beforeEach(() => { mockOnNext = jest.fn(); mockOnPrevious = jest.fn(); }); const renderer = (props) => render(React.createElement(PaperProvider, null, React.createElement(RegistrationContextProvider, Object.assign({}, registrationContextProviderProps), React.createElement(RegistrationWorkflow, { initialScreenIndex: 0 }, React.createElement(CreatePasswordScreen, Object.assign({}, props)))))); it('renders without crashing', () => { renderer(); expect(screen.getByText('Create Password')).toBeOnTheScreen(); }); it('clicking on close Icon test', () => { renderer(); const closeIcon = screen.getByTestId('blui-workflow-card-header-icon'); fireEvent.press(closeIcon); expect(render).toBeTruthy(); }); it('should call onNext, when Next button clicked', () => __awaiter(void 0, void 0, void 0, function* () { renderer({ WorkflowCardActionsProps: { onNext: mockOnNext(), showNext: true, nextLabel: 'Next', }, PasswordProps: { newPasswordLabel: 'Password', confirmPasswordLabel: 'Confirm Password', passwordRequirements: passwordRequirements, onPasswordChange: jest.fn(), }, }); const passwordField = screen.getByTestId('blui-set-password-password-text-field'); const confirmPasswordField = screen.getByTestId('blui-set-password-confirm-password-text-field'); const nextButton = screen.getByText('Next'); expect(nextButton).toBeDisabled(); fireEvent.changeText(passwordField, 'ab123'); fireEvent.changeText(confirmPasswordField, 'ab123'); expect(nextButton).toBeEnabled(); fireEvent.press(nextButton); expect(mockOnNext).toHaveBeenCalled(); yield waitFor(() => expect(screen.getByTestId('blui-spinner')).toBeOnTheScreen()); })); it('should enable next button, when passwordRequirements prop is empty', () => { renderer({ WorkflowCardActionsProps: { onNext: mockOnNext(), showNext: true, nextLabel: 'Next', }, PasswordProps: { newPasswordLabel: 'Password', confirmPasswordLabel: 'Confirm Password', onPasswordChange: jest.fn(), passwordRequirements: [], onSubmit: jest.fn(), }, }); const passwordField = screen.getByTestId('blui-set-password-password-text-field'); const confirmPasswordField = screen.getByTestId('blui-set-password-confirm-password-text-field'); fireEvent.changeText(passwordField, 'A'); fireEvent.changeText(confirmPasswordField, 'A'); expect(passwordField.props.value).toBe('A'); expect(confirmPasswordField.props.value).toBe('A'); }); it('should call onPrevious, when Back button clicked', () => { renderer({ WorkflowCardActionsProps: { onPrevious: mockOnPrevious(), showPrevious: true, previousLabel: 'Back', }, PasswordProps: { newPasswordLabel: 'Password', confirmPasswordLabel: 'Confirm Password', onPasswordChange: jest.fn(), passwordRequirements: passwordRequirements, }, }); const backButton = screen.getByText('Back'); fireEvent.press(backButton); expect(mockOnPrevious).toHaveBeenCalled(); }); it('should call onSubmit callBack function', () => __awaiter(void 0, void 0, void 0, function* () { renderer(); const passwordInput = screen.getByTestId('blui-set-password-password-text-field'); expect(passwordInput.props.value).toBe(''); const confirmInput = screen.getByTestId('blui-set-password-confirm-password-text-field'); expect(confirmInput.props.value).toBe(''); fireEvent.changeText(passwordInput, 'Test@123'); fireEvent.changeText(confirmInput, 'Test@123'); fireEvent(confirmInput, 'submitEditing'); expect(screen.getByTestId('blui-spinner')).toBeOnTheScreen(); yield waitFor(() => expect(screen.getByTestId('blui-spinner')).toBeOnTheScreen()); })); it('should return false when password is not matching as per requirements', () => { renderer(); const passwordInput = screen.getByTestId('blui-set-password-password-text-field'); expect(passwordInput.props.value).toBe(''); const confirmInput = screen.getByTestId('blui-set-password-confirm-password-text-field'); expect(confirmInput.props.value).toBe(''); fireEvent.changeText(passwordInput, 'test@123'); fireEvent.changeText(confirmInput, 'Test@123'); expect(screen.getByText('Passwords do not match')).toBeOnTheScreen(); }); });