diff --git a/src/common-components/tests/ThirdPartyAuthAlert.test.jsx b/src/common-components/tests/ThirdPartyAuthAlert.test.jsx index 435f122740..e60ebdb2ce 100644 --- a/src/common-components/tests/ThirdPartyAuthAlert.test.jsx +++ b/src/common-components/tests/ThirdPartyAuthAlert.test.jsx @@ -3,7 +3,7 @@ import React from 'react'; import { IntlProvider } from '@edx/frontend-platform/i18n'; import renderer from 'react-test-renderer'; -import { REGISTER_PAGE } from '../../data/constants'; +import { PENDING_STATE, REGISTER_PAGE } from '../../data/constants'; import ThirdPartyAuthAlert from '../ThirdPartyAuthAlert'; describe('ThirdPartyAuthAlert', () => { @@ -38,4 +38,19 @@ describe('ThirdPartyAuthAlert', () => { ).toJSON(); expect(tree).toMatchSnapshot(); }); + + it('renders skeleton for pending third-party auth', () => { + props = { + ...props, + thirdPartyAuthApiStatus: PENDING_STATE, + isThirdPartyAuthActive: true, + }; + + const tree = renderer.create( + + + , + ).toJSON(); + expect(tree).toMatchSnapshot(); + }); }); diff --git a/src/common-components/tests/__snapshots__/ThirdPartyAuthAlert.test.jsx.snap b/src/common-components/tests/__snapshots__/ThirdPartyAuthAlert.test.jsx.snap index e0e57b6e84..561a3007fd 100644 --- a/src/common-components/tests/__snapshots__/ThirdPartyAuthAlert.test.jsx.snap +++ b/src/common-components/tests/__snapshots__/ThirdPartyAuthAlert.test.jsx.snap @@ -1,5 +1,25 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`ThirdPartyAuthAlert renders skeleton for pending third-party auth 1`] = ` + +`; + exports[`ThirdPartyAuthAlert should match login page third party auth alert message snapshot 1`] = `
{ ); }); + it('should validate for full name length', () => { + const longName = ` + 5cnx16mn7qTSbtiha1W473ZtV5prGBCEtNrfLkqizJirf + v5kbzBpLRbdh7FY5qujb8viQ9zPziE1fWnbFu5tj4FXaY5GDESvVwjQkE + txUPE3r9mk4HYcSfXVJPWAWRuK2LJZycZWDm0BMFLZ63YdyQAZhjyvjn7 + SCqKjSHDx7mgwFp35PF4CxwtwNLxY11eqf5F88wQ9k2JQ9U8uKSFyTKCM + A456CGA5KjUugYdT1qKdvvnXtaQr8WA87m9jpe16 + `; + const { container } = render(routerWrapper(reduxWrapper())); + const nameInput = container.querySelector('input#name'); + fireEvent.blur(nameInput, { target: { value: longName, name: 'name' } }); + + expect(props.handleErrorChange).toHaveBeenCalledTimes(1); + expect(props.handleErrorChange).toHaveBeenCalledWith( + 'name', + 'Full name cannot be longer than 255 characters', + ); + }); + it('should clear error on focus', () => { const { container } = render(routerWrapper(reduxWrapper())); diff --git a/src/register/RegistrationFields/NameField/validator.js b/src/register/RegistrationFields/NameField/validator.js index aefaedfb3f..fce71cd593 100644 --- a/src/register/RegistrationFields/NameField/validator.js +++ b/src/register/RegistrationFields/NameField/validator.js @@ -15,6 +15,8 @@ const validateName = (value, formatMessage) => { fieldError = formatMessage(messages['empty.name.field.error']); } else if (URL_REGEX.test(value) || HTML_REGEX.test(value) || INVALID_NAME_REGEX.test(value)) { fieldError = formatMessage(messages['name.validation.message']); + } else if (value && value.length > 255) { + fieldError = formatMessage(messages['name.validation.length.message']); } return fieldError; }; diff --git a/src/register/messages.jsx b/src/register/messages.jsx index 39d9e7f549..2b0afe59a9 100644 --- a/src/register/messages.jsx +++ b/src/register/messages.jsx @@ -126,6 +126,11 @@ const messages = defineMessages({ defaultMessage: 'Enter a valid name', description: 'Validation message that appears when fullname contain URL', }, + 'name.validation.length.message': { + id: 'name.validation.message', + defaultMessage: 'Full name cannot be longer than 255 characters', + description: 'Validation message that appears when the full name exceeds the character limit', + }, 'password.validation.message': { id: 'password.validation.message', defaultMessage: 'Password criteria has not been met',