import React from 'react'; import { fireEvent } from '@testing-library/react'; import configureMockStore from 'redux-mock-store'; import thunk from 'redux-thunk'; import { renderWithProvider } from '../../../../../test/lib/render-helpers'; import CustomizeNonce from '.'; const mockHideModal = jest.fn(); jest.mock('../../../../store/actions.ts', () => ({ ...jest.requireActual('../../../../store/actions.ts'), hideModal: () => mockHideModal, })); describe('Customize Nonce', () => { const mockState = { appState: { modal: { modalState: { props: {}, }, }, }, }; const mockStore = configureMockStore([thunk])(mockState); const props = { nextNonce: 1, customNonceValue: '', updateCustomNonce: jest.fn(), getNextNonce: jest.fn(), }; afterEach(() => { jest.clearAllMocks(); }); it('should match snapshot', () => { const { container } = renderWithProvider( , mockStore, ); expect(container).toMatchSnapshot(); }); it('should change and submit custom nonce', async () => { const { queryByTestId, queryByText } = renderWithProvider( , mockStore, ); const nonceInputEvent = { target: { value: 101, }, }; const nonceInput = queryByTestId('custom-nonce-input'); fireEvent.change(nonceInput, nonceInputEvent); expect(nonceInput).toHaveValue(101); const saveButton = queryByText('Save'); fireEvent.click(saveButton); expect(props.updateCustomNonce).toHaveBeenCalledWith('101'); expect(props.getNextNonce).toHaveBeenCalled(); expect(mockHideModal).toHaveBeenCalled(); }); it('should handle emptry string custom nonce', () => { const { queryByTestId, queryByText } = renderWithProvider( , mockStore, ); const nonceInputEvent = { target: { value: '', }, }; const nonceInput = queryByTestId('custom-nonce-input'); fireEvent.change(nonceInput, nonceInputEvent); const saveButton = queryByText('Save'); fireEvent.click(saveButton); expect(props.updateCustomNonce).toHaveBeenCalledWith( props.customNonceValue, ); }); it('should handle cancel', async () => { const { queryByText } = renderWithProvider( , mockStore, ); const modalClose = queryByText('Cancel'); fireEvent.click(modalClose); expect(mockHideModal).toHaveBeenCalled(); }); it('should handle reset of nonce', async () => { const { queryByTestId } = renderWithProvider( , mockStore, ); const resetNonce = queryByTestId('customize-nonce-reset'); const nonceInputEvent = { target: { value: 101, }, }; const nonceInput = queryByTestId('custom-nonce-input'); fireEvent.change(nonceInput, nonceInputEvent); expect(nonceInput).toHaveValue(101); fireEvent.click(resetNonce); expect(nonceInput).toHaveValue(props.nextNonce); }); });