import {Modal} from 'react-bootstrap'; import React from 'react'; import {mount} from 'enzyme'; import RecoveryOptionsModal from 'app/components/modals/recoveryOptionsModal'; describe('RecoveryOptionsModal', function() { const closeModal = jest.fn(); const onClose = jest.fn(); let wrapper; beforeEach(function() { MockApiClient.clearMockResponses(); MockApiClient.addMockResponse({ url: '/users/me/authenticators/', method: 'GET', body: TestStubs.AllAuthenticators(), }); wrapper = mount( , TestStubs.routerContext() ); }); afterEach(function() {}); it('can redirect to recovery codes if user skips backup phone setup', async function() { const getRecoveryCodes = 'RecoveryOptionsModal Button[name="getCodes"]'; expect(wrapper.find(getRecoveryCodes)).toHaveLength(0); // skip backup phone setup wrapper.find('RecoveryOptionsModal Button[name="skipStep"]').simulate('click'); expect(wrapper.find(getRecoveryCodes)).toHaveLength(1); const mockId = TestStubs.Authenticators().Recovery().authId; expect( wrapper.find('RecoveryOptionsModal Button[name="getCodes"]').prop('to') ).toMatch(`/settings/account/security/mfa/${mockId}/`); wrapper.find(getRecoveryCodes).simulate('click'); expect(closeModal).toHaveBeenCalled(); }); it('can redirect to backup phone setup', async function() { const backupPhone = 'RecoveryOptionsModal Button[name="addPhone"]'; expect(wrapper.find(backupPhone)).toHaveLength(1); expect(wrapper.find(backupPhone).prop('to')).toMatch( '/settings/account/security/mfa/sms/enroll/' ); wrapper.find(backupPhone).simulate('click'); expect(closeModal).toHaveBeenCalled(); }); it('skips backup phone setup if text message authenticator unavailable', async function() { MockApiClient.clearMockResponses(); MockApiClient.addMockResponse({ url: '/users/me/authenticators/', method: 'GET', body: [TestStubs.Authenticators().Totp(), TestStubs.Authenticators().Recovery()], }); wrapper = mount( , TestStubs.routerContext() ); const mockId = TestStubs.Authenticators().Recovery().authId; expect( wrapper.find('RecoveryOptionsModal Button[name="getCodes"]').prop('to') ).toMatch(`/settings/account/security/mfa/${mockId}/`); expect(wrapper.find('RecoveryOptionsModal Button[name="skipStep"]')).toHaveLength(0); expect(wrapper.find('RecoveryOptionsModal Button[name="addPhone"]')).toHaveLength(0); }); });