UNPKG

auth0-lock

Version:
331 lines (329 loc) 13.2 kB
"use strict"; var _immutable = _interopRequireDefault(require("immutable")); var _actions = _interopRequireDefault(require("connection/passwordless/actions")); var _testUtils = require("testUtils"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } jest.useFakeTimers(); describe('passwordless actions', function () { var mockFns; var actions; beforeEach(function () { jest.resetModules(); jest.mock('connection/passwordless/index', function () { return { isEmail: jest.fn(), isSendLink: jest.fn(), resend: 'resend', restartPasswordless: jest.fn(), send: function send() { return 'send'; }, setPasswordlessStarted: jest.fn(), setResendFailed: jest.fn(), setResendSuccess: jest.fn(), toggleTermsAcceptance: jest.fn() }; }); jest.mock('field/phone_number', function () { return { phoneNumberWithDiallingCode: function phoneNumberWithDiallingCode() { return 'phoneNumberWithDiallingCode'; } }; }); jest.mock('field/index', function () { return { getFieldValue: function getFieldValue(m, field) { return field; } }; }); jest.mock('core/web_api', function () { return { startPasswordless: jest.fn(), passwordlessVerify: jest.fn(), getPasswordlessChallenge: jest.fn() }; }); jest.mock('core/actions', function () { return { closeLock: jest.fn(), logIn: jest.fn(), validateAndSubmit: jest.fn(), logInSuccess: jest.fn() }; }); jest.mock('i18n', function () { return { html: function html(_, keys) { return keys.join(','); } }; }); jest.mock('core/index', function () { return { id: function id() { return 'id'; }, setSubmitting: jest.fn(function (m) { return m; }), auth: { params: function params() { return { toJS: function toJS() { return { auth: 'params' }; } }; } }, emitAuthorizationErrorEvent: jest.fn(), connections: jest.fn(), useCustomPasswordlessConnection: jest.fn(function () { return false; }), passwordlessCaptcha: jest.fn() }; }); jest.mock('store/index', function () { return { read: jest.fn(function () { return 'model'; }), getEntity: 'getEntity', swap: jest.fn(), updateEntity: 'updateEntity' }; }); actions = require('connection/passwordless/actions'); require('core/index').connections.mockImplementation(function () { return _immutable.default.fromJS([]); }); }); describe('requestPasswordlessEmail()', function () { it('calls validateAndSubmit()', function () { actions.requestPasswordlessEmail('id'); (0, _testUtils.expectMockToMatch)(require('core/actions').validateAndSubmit, 1); }); it('calls startPasswordless', function () { actions.requestPasswordlessEmail('id'); require('core/actions').validateAndSubmit.mock.calls[0][2]('model'); (0, _testUtils.expectMockToMatch)(require('core/web_api').startPasswordless, 1); }); it('calls startPasswordless with a custom email connection name', function () { actions.requestPasswordlessEmail('id'); require('core/index').connections.mockImplementation(function () { return _immutable.default.fromJS([{ name: 'custom-connection', strategy: 'email', type: 'passwordless' }]); }); require('core/index').useCustomPasswordlessConnection.mockReturnValue(true); require('core/actions').validateAndSubmit.mock.calls[0][2]('model'); (0, _testUtils.expectMockToMatch)(require('core/web_api').startPasswordless, 1); }); it('calls setPasswordlessStarted() on success', function () { actions.requestPasswordlessEmail('id'); require('core/actions').validateAndSubmit.mock.calls[0][2]('model'); require('core/web_api').startPasswordless.mock.calls[0][2](null); var _require = require('store/index'), swap = _require.swap; (0, _testUtils.expectMockToMatch)(swap, 1); swap.mock.calls[0][3]('model'); (0, _testUtils.expectMockToMatch)(require('core/index').setSubmitting, 1); (0, _testUtils.expectMockToMatch)(require('connection/passwordless/index').setPasswordlessStarted, 1); }); describe('normalizes the error message', function () { it('with a generic error', function () { actions.requestPasswordlessEmail('id'); require('core/actions').validateAndSubmit.mock.calls[0][2]('model'); var error = new Error('foobar'); error.error = 'some_error_code'; require('core/web_api').startPasswordless.mock.calls[0][2](error); jest.runAllTimers(); var _require2 = require('store/index'), read = _require2.read, swap = _require2.swap; (0, _testUtils.expectMockToMatch)(read, 1); (0, _testUtils.expectMockToMatch)(swap, 1); }); it('with a sms_provider_error error and description includes (Code: 21211)', function () { actions.requestPasswordlessEmail('id'); require('core/actions').validateAndSubmit.mock.calls[0][2]('model'); var error = new Error('foobar'); error.error = 'sms_provider_error'; error.description = 'something (Code: 21211)'; require('core/web_api').startPasswordless.mock.calls[0][2](error); jest.runAllTimers(); var _require3 = require('store/index'), read = _require3.read, swap = _require3.swap; (0, _testUtils.expectMockToMatch)(swap, 1); }); }); }); describe('resendEmail()', function () { it('calls setResendSuccess() on success', function () { actions.resendEmail('id'); var _require4 = require('store/index'), read = _require4.read, swap = _require4.swap; (0, _testUtils.expectMockToMatch)(read, 1); (0, _testUtils.expectMockToMatch)(swap, 1); require('core/web_api').startPasswordless.mock.calls[0][2](null); swap.mock.calls[1][3]('model'); (0, _testUtils.expectMockToMatch)(require('connection/passwordless/index').setResendSuccess, 1); }); it('calls setResendFailed on error', function () { actions.resendEmail('id'); var _require5 = require('store/index'), read = _require5.read, swap = _require5.swap; (0, _testUtils.expectMockToMatch)(read, 1); (0, _testUtils.expectMockToMatch)(swap, 1); require('core/web_api').startPasswordless.mock.calls[0][2](new Error('foobar')); jest.runAllTimers(); swap.mock.calls[1][3]('model'); (0, _testUtils.expectMockToMatch)(require('connection/passwordless/index').setResendFailed, 1); }); }); describe('sendSMS()', function () { it('calls validateAndSubmit()', function () { actions.sendSMS('id'); (0, _testUtils.expectMockToMatch)(require('core/actions').validateAndSubmit, 1); }); it('calls startPasswordless', function () { actions.sendSMS('id'); require('core/actions').validateAndSubmit.mock.calls[0][2]('model'); (0, _testUtils.expectMockToMatch)(require('core/web_api').startPasswordless, 1); }); it('calls startPasswordless with a custom SMS connection', function () { actions.sendSMS('id'); require('core/index').connections.mockImplementation(function () { return _immutable.default.fromJS([{ name: 'custom-connection', strategy: 'sms', type: 'passwordless' }]); }); require('core/index').useCustomPasswordlessConnection.mockReturnValue(true); require('core/actions').validateAndSubmit.mock.calls[0][2]('model'); (0, _testUtils.expectMockToMatch)(require('core/web_api').startPasswordless, 1); }); it('calls setPasswordlessStarted() on success', function () { actions.sendSMS('id'); require('core/actions').validateAndSubmit.mock.calls[0][2]('model'); require('core/web_api').startPasswordless.mock.calls[0][2](null); var _require6 = require('store/index'), swap = _require6.swap; (0, _testUtils.expectMockToMatch)(swap, 1); swap.mock.calls[0][3]('model'); (0, _testUtils.expectMockToMatch)(require('core/index').setSubmitting, 1); (0, _testUtils.expectMockToMatch)(require('connection/passwordless/index').setPasswordlessStarted, 1); }); describe('normalizes the error message', function () { it('with a generic error', function () { actions.sendSMS('id'); require('core/actions').validateAndSubmit.mock.calls[0][2]('model'); var error = new Error('foobar'); error.error = 'some_error_code'; require('core/web_api').startPasswordless.mock.calls[0][2](error); jest.runAllTimers(); var _require7 = require('store/index'), read = _require7.read, swap = _require7.swap; (0, _testUtils.expectMockToMatch)(read, 1); (0, _testUtils.expectMockToMatch)(swap, 1); }); it('with a sms_provider_error error and description includes (Code: 21211)', function () { actions.sendSMS('id'); require('core/actions').validateAndSubmit.mock.calls[0][2]('model'); var error = new Error('foobar'); error.error = 'sms_provider_error'; error.description = 'something (Code: 21211)'; require('core/web_api').startPasswordless.mock.calls[0][2](error); jest.runAllTimers(); var _require8 = require('store/index'), read = _require8.read, swap = _require8.swap; (0, _testUtils.expectMockToMatch)(swap, 1); }); it('emits the "authorization_error" event', function () { actions.sendSMS('id'); require('core/actions').validateAndSubmit.mock.calls[0][2]('model'); var error = new Error('foobar'); error.error = 'some_error_code'; require('core/web_api').startPasswordless.mock.calls[0][2](error); jest.runAllTimers(); (0, _testUtils.expectMockToMatch)(require('core/index').emitAuthorizationErrorEvent, 1); }); }); }); describe('login()', function () { it('sets setSubmitting to true', function () { actions.logIn('id'); var _require9 = require('store/index'), read = _require9.read, swap = _require9.swap; (0, _testUtils.expectMockToMatch)(read, 1); (0, _testUtils.expectMockToMatch)(swap, 1); }); it('calls webApi.passwordlessVerify() with sms options', function () { actions.logIn('id'); (0, _testUtils.expectMockToMatch)(require('core/web_api').passwordlessVerify, 1); }); it('calls webApi.passwordlessVerify() with email options', function () { require('connection/passwordless/index').isEmail = function () { return true; }; actions.logIn('id'); (0, _testUtils.expectMockToMatch)(require('core/web_api').passwordlessVerify, 1); }); describe('on webApi.passwordlessVerify() callback', function () { describe('when there is an error', function () { it('formats the error', function () { actions.logIn('id'); var error = new Error('foobar'); error.error = 'some_error_code'; require('core/web_api').passwordlessVerify.mock.calls[0][2](error); var _require0 = require('store/index'), swap = _require0.swap; (0, _testUtils.expectMockToMatch)(swap, 2); }); it('emits the "authorization_error" event', function () { actions.logIn('id'); var error = new Error('foobar'); error.error = 'some_error_code'; require('core/web_api').passwordlessVerify.mock.calls[0][2](error); (0, _testUtils.expectMockToMatch)(require('core/index').emitAuthorizationErrorEvent, 1); }); }); it('calls logInSuccess on success', function () { actions.logIn('id'); require('core/web_api').passwordlessVerify.mock.calls[0][2](null, { result: true }); (0, _testUtils.expectMockToMatch)(require('core/actions').logInSuccess, 1); }); }); }); describe('toggleTermsAcceptance()', function () { it('calls internalToggleTermsAcceptance()', function () { actions.toggleTermsAcceptance('id'); var _require1 = require('store/index'), swap = _require1.swap; (0, _testUtils.expectMockToMatch)(swap, 1); swap.mock.calls[0][3]('model'); (0, _testUtils.expectMockToMatch)(require('connection/passwordless/index').toggleTermsAcceptance, 1); }); }); it('restart calls restartPasswordless', function () { actions.restart('id'); var _require10 = require('store/index'), swap = _require10.swap; (0, _testUtils.expectMockToMatch)(swap, 1); }); });