import React from 'react'; import { fireEvent } from '@testing-library/react'; import configureStore from 'redux-mock-store'; import { renderWithProvider } from '../../../../test/lib/render-helpers'; import testData from '../../../../.storybook/test-data'; import { hideModal } from '../../../store/actions'; import CustodyConfirmLink from '.'; const mockedSetWaitForConfirmDeepLinkDialog = jest .fn() .mockReturnValue({ type: 'TYPE' }); jest.mock('../../../store/institutional/institution-background', () => ({ mmiActionsFactory: () => ({ setWaitForConfirmDeepLinkDialog: mockedSetWaitForConfirmDeepLinkDialog, }), })); jest.mock('../../../store/actions', () => ({ hideModal: jest.fn().mockReturnValue({ type: 'TYPE' }), })); const mockedCustodianName = 'saturn-dev'; describe('Custody Confirm Link', () => { const mockStore = { ...testData, appState: { ...testData.appState, modal: { modalState: { props: { link: { url: 'test-url', ethereum: { accounts: [{}], }, text: '', action: '', }, }, }, }, }, metamask: { ...testData.metamask, mmiConfiguration: { custodians: [ { refreshTokenUrl: 'https://saturn-custody.dev.metamask-institutional.io/oauth/token', name: 'saturn-dev', displayName: 'Saturn Custody', enabled: true, mmiApiUrl: 'https://api.dev.metamask-institutional.io/v1', websocketApiUrl: 'wss://websocket.dev.metamask-institutional.io/v1/ws', apiBaseUrl: 'https://saturn-custody.dev.metamask-institutional.io/eth', iconUrl: 'https://saturn-custody-ui.dev.metamask-institutional.io/saturn.svg', isNoteToTraderSupported: true, }, ], }, custodyAccountDetails: { '0xAddress': { address: '0xAddress', details: 'details', custodyType: 'testCustody - Saturn', custodianName: mockedCustodianName, }, }, providerConfig: { type: 'test', }, selectedAddress: '0xAddress', }, }; let store = configureStore()(mockStore); it('tries to open new tab with deeplink URL', () => { global.platform = { openTab: jest.fn() }; const { getByTestId } = renderWithProvider(, store); fireEvent.click(getByTestId('custody-confirm-link__btn')); expect(global.platform.openTab).toHaveBeenCalledWith({ url: 'test-url', }); expect(mockedSetWaitForConfirmDeepLinkDialog).toHaveBeenCalledWith(false); expect(hideModal).toHaveBeenCalledTimes(1); }); it('shows custodian name when iconUrl is undefined', () => { const customMockStore = { ...mockStore, metamask: { ...testData.metamask, ...mockStore.metamask, mmiConfiguration: { custodians: [ { refreshTokenUrl: 'https://saturn-custody.dev.metamask-institutional.io/oauth/token', name: 'saturn-dev', displayName: 'Saturn Custody', enabled: true, mmiApiUrl: 'https://api.dev.metamask-institutional.io/v1', websocketApiUrl: 'wss://websocket.dev.metamask-institutional.io/v1/ws', apiBaseUrl: 'https://saturn-custody.dev.metamask-institutional.io/eth', iconUrl: null, isNoteToTraderSupported: true, }, ], }, }, }; store = configureStore()(customMockStore); const { getByText } = renderWithProvider(, store); expect(getByText(mockedCustodianName)).toBeVisible(); }); it('shows text that comes from modal state if defined', () => { const mockModalStateText = 'test modal state text'; const customMockStore = { ...mockStore, appState: { ...testData.appState, modal: { modalState: { props: { link: { url: 'test-url', ethereum: { accounts: [{}], }, text: mockModalStateText, action: '', }, }, }, }, }, }; store = configureStore()(customMockStore); const { getByText } = renderWithProvider(, store); expect(getByText(mockModalStateText)).toBeVisible(); }); it('shows action text that comes from modal state if defined', () => { const mockModalStateActionText = 'test modal state action text'; const customMockStore = { ...mockStore, appState: { ...testData.appState, modal: { modalState: { props: { link: { url: 'test-url', ethereum: { accounts: [{}], }, text: '', action: mockModalStateActionText, }, }, }, }, }, }; store = configureStore()(customMockStore); const { getByText } = renderWithProvider(, store); expect(getByText(mockModalStateActionText)).toBeVisible(); }); });