diff --git a/src/logistration/tests/LoginHelpLinks.test.jsx b/src/logistration/tests/LoginHelpLinks.test.jsx new file mode 100644 index 00000000..357f6dc9 --- /dev/null +++ b/src/logistration/tests/LoginHelpLinks.test.jsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { IntlProvider } from '@edx/frontend-platform/i18n'; +import { mount } from 'enzyme'; + +import LoginHelpLinks from '../LoginHelpLinks'; + +describe('LoginHelpLinks', () => { + let props = {}; + const otherSignInIssues = 'https://support.edx.org/hc/en-us/sections/115004153367-Solve-a-Sign-in-Problem'; + + const reduxWrapper = children => ( + + {children} + + ); + + it('renders help links on button click', () => { + props = { + ...props, + page: 'login', + }; + const loginHelpLinks = mount(reduxWrapper()); + + expect(loginHelpLinks.find('.login-help').length).toBe(0); + loginHelpLinks.find('button').simulate('click'); + expect(loginHelpLinks.find('.login-help').length).toBe(1); + }); + + it('should display login page help links', () => { + props = { + ...props, + page: 'login', + }; + + const wrapper = mount(reduxWrapper()); + wrapper.find('button').simulate('click'); + + const loginHelpLinks = wrapper.find('a'); + + expect(loginHelpLinks.at(0).prop('href')).toEqual('/reset'); + expect(loginHelpLinks.at(1).prop('href')).toEqual(otherSignInIssues); + }); + + it('should display forget password page help links', () => { + props = { + ...props, + page: 'forget-password', + }; + + const wrapper = mount(reduxWrapper()); + wrapper.find('button').simulate('click'); + + const loginHelpLinks = wrapper.find('a'); + + expect(loginHelpLinks.at(0).prop('href')).toEqual('/register'); + expect(loginHelpLinks.at(1).prop('href')).toEqual(otherSignInIssues); + }); +}); diff --git a/src/logistration/tests/LoginPage.test.jsx b/src/logistration/tests/LoginPage.test.jsx index 07050bda..eda4779f 100644 --- a/src/logistration/tests/LoginPage.test.jsx +++ b/src/logistration/tests/LoginPage.test.jsx @@ -40,20 +40,51 @@ describe('LoginPage', () => { expect(tree).toMatchSnapshot(); }); + it('should match forget password alert message snapshot', () => { + props = { + ...props, + forgotPassword: { status: 'complete', email: 'test@example.com' }, + }; + const tree = renderer.create(reduxWrapper()).toJSON(); + expect(tree).toMatchSnapshot(); + }); + it('should display login help button', () => { const root = mount(reduxWrapper()); expect(root.find('button.field-link').text()).toEqual('Need help signing in?'); }); + it('updates the error state for invalid email', () => { + const errorState = { email: null, password: null }; + const loginPage = mount(reduxWrapper()); + + loginPage.find('button.submit').simulate('click'); + expect(loginPage.find('LoginPage').state('errors')).toEqual(errorState); + }); + + it('updates the error state for invalid password', () => { + const errorState = { email: '', password: null }; + const loginPage = mount(reduxWrapper()); + + loginPage.find('input#loginEmail').simulate('change', { target: { value: 'test@example.com', name: 'email' } }); + loginPage.find('button.submit').simulate('click'); + expect(loginPage.find('LoginPage').state('errors')).toEqual(errorState); + }); + it('should match url after redirection', () => { const dasboardUrl = 'http://test.com/dashboard/'; - props = { - ...props, - loginResult: { success: true, redirectUrl: dasboardUrl }, - }; + store = mockStore({ + ...store, + logistration: { + ...store.logistration, + loginResult: { + success: true, + redirectUrl: dasboardUrl, + }, + }, + }); delete window.location; window.location = { href: '' }; - window.location.href = dasboardUrl; renderer.create(reduxWrapper()); expect(window.location.href).toBe(dasboardUrl); }); diff --git a/src/logistration/tests/__snapshots__/LoginPage.test.jsx.snap b/src/logistration/tests/__snapshots__/LoginPage.test.jsx.snap index cd413f23..b625ee9d 100644 --- a/src/logistration/tests/__snapshots__/LoginPage.test.jsx.snap +++ b/src/logistration/tests/__snapshots__/LoginPage.test.jsx.snap @@ -246,3 +246,250 @@ exports[`LoginPage should match default section snapshot 1`] = ` `; + +exports[`LoginPage should match forget password alert message snapshot 1`] = ` +
+
+
+

+ First time here? + + Create an Account. + +

+
+
+
+

+ Sign In +

+
+
+ + + + The email address you've provided isn't formatted correctly. + +
+
+

+ The email address you used to register with edX. +

+
+
+ + + + Please enter your password. + +
+
+ +
+
+
+
+ + +
+

+ or sign in with +

+
+
+ + + +
+
+
+`;