import React from 'react'; import configureMockStore from 'redux-mock-store'; import thunk from 'redux-thunk'; import { renderWithProvider, createSwapsMockStore, setBackgroundConnection, fireEvent, } from '../../../../test/jest'; import { CHAIN_IDS } from '../../../../shared/constants/network'; import SmartTransactionStatus from '.'; const middleware = [thunk]; setBackgroundConnection({ stopPollingForQuotes: jest.fn(), setBackgroundSwapRouteState: jest.fn(), }); jest.mock('react-router-dom', () => { const original = jest.requireActual('react-router-dom'); return { ...original, useHistory: () => ({ push: jest.fn(), }), }; }); jest.mock('../../../ducks/swaps/swaps', () => { const original = jest.requireActual('../../../ducks/swaps/swaps'); return { ...original, prepareToLeaveSwaps: jest.fn(() => { return { type: 'MOCK_TYPE', }; }), }; }); describe('SmartTransactionStatus', () => { it('renders the component with initial props', () => { const store = configureMockStore(middleware)(createSwapsMockStore()); const { getByText } = renderWithProvider(, store); expect(getByText('Publicly submitting your Swap...')).toBeInTheDocument(); expect(getByText('Close')).toBeInTheDocument(); }); it('renders the "success" STX status', () => { const mockStore = createSwapsMockStore(); const latestSmartTransaction = mockStore.metamask.smartTransactionsState.smartTransactions[ CHAIN_IDS.MAINNET ][1]; latestSmartTransaction.status = 'success'; const store = configureMockStore(middleware)(mockStore); const { getByText } = renderWithProvider(, store); expect(getByText('Swap complete!')).toBeInTheDocument(); expect(getByText('Your USDC is now available.')).toBeInTheDocument(); expect(getByText('Create a new swap')).toBeInTheDocument(); expect(getByText('Close')).toBeInTheDocument(); }); it('renders the "reverted" STX status', () => { const mockStore = createSwapsMockStore(); const latestSmartTransaction = mockStore.metamask.smartTransactionsState.smartTransactions[ CHAIN_IDS.MAINNET ][1]; latestSmartTransaction.status = 'reverted'; const store = configureMockStore(middleware)(mockStore); const { getByText } = renderWithProvider(, store); expect(getByText('Swap failed')).toBeInTheDocument(); expect(getByText('customer support')).toBeInTheDocument(); expect(getByText('Close')).toBeInTheDocument(); }); it('renders the "cancelled_user_cancelled" STX status', () => { const mockStore = createSwapsMockStore(); const latestSmartTransaction = mockStore.metamask.smartTransactionsState.smartTransactions[ CHAIN_IDS.MAINNET ][1]; latestSmartTransaction.status = 'cancelled_user_cancelled'; const store = configureMockStore(middleware)(mockStore); const { getByText } = renderWithProvider(, store); expect(getByText('Swap cancelled')).toBeInTheDocument(); expect( getByText( 'Your transaction has been cancelled and you did not pay any unnecessary gas fees.', ), ).toBeInTheDocument(); expect(getByText('Close')).toBeInTheDocument(); }); it('renders the "deadline_missed" STX status', () => { const mockStore = createSwapsMockStore(); const latestSmartTransaction = mockStore.metamask.smartTransactionsState.smartTransactions[ CHAIN_IDS.MAINNET ][1]; latestSmartTransaction.status = 'deadline_missed'; const store = configureMockStore(middleware)(mockStore); const { getByText } = renderWithProvider(, store); expect(getByText('Swap would have failed')).toBeInTheDocument(); expect( getByText( 'Your transaction would have failed and was cancelled to protect you from paying unnecessary gas fees.', ), ).toBeInTheDocument(); expect(getByText('Close')).toBeInTheDocument(); }); it('renders the "unknown" STX status', () => { const mockStore = createSwapsMockStore(); const latestSmartTransaction = mockStore.metamask.smartTransactionsState.smartTransactions[ CHAIN_IDS.MAINNET ][1]; latestSmartTransaction.status = 'unknown'; const store = configureMockStore(middleware)(mockStore); const { getByText } = renderWithProvider(, store); expect(getByText('Status unknown')).toBeInTheDocument(); expect( getByText( 'A transaction has been successful but we’re unsure what it is. This may be due to submitting another transaction while this swap was processing.', ), ).toBeInTheDocument(); expect(getByText('Close')).toBeInTheDocument(); }); it('cancels a transaction', () => { const store = configureMockStore(middleware)(createSwapsMockStore()); const { getByText } = renderWithProvider(, store); expect(getByText('Publicly submitting your Swap...')).toBeInTheDocument(); const cancelLink = getByText('Cancel swap for ~0'); expect(cancelLink).toBeInTheDocument(); fireEvent.click(cancelLink); expect( getByText('Trying to cancel your transaction...'), ).toBeInTheDocument(); expect(cancelLink).not.toBeInTheDocument(); }); it('clicks on the Close button', () => { const store = configureMockStore(middleware)(createSwapsMockStore()); const { getByText } = renderWithProvider(, store); expect(getByText('Publicly submitting your Swap...')).toBeInTheDocument(); const closeButton = getByText('Close'); expect(closeButton).toBeInTheDocument(); fireEvent.click(closeButton); }); });