import React from 'react'; import { render } from '@testing-library/react'; import { PlaidEmbeddedLink, PlaidLinkOptions } from './'; import useScript from './react-script-hook'; jest.mock('./react-script-hook'); const mockedUseScript = useScript as jest.Mock; const ScriptLoadingState = { LOADING: [true, null], LOADED: [false, null], ERROR: [false, 'SCRIPT_LOAD_ERROR'], }; describe('PlaidEmbeddedLink', () => { const config: PlaidLinkOptions = { token: 'test-token', onSuccess: jest.fn(), onExit: jest.fn(), onLoad: jest.fn(), onEvent: jest.fn(), }; const createEmbeddedSpy = jest.fn(() => ({ destroy: jest.fn(), })); beforeEach(() => { mockedUseScript.mockImplementation(() => ScriptLoadingState.LOADED); window.Plaid = { createEmbedded: createEmbeddedSpy, }; }); afterEach(() => { jest.clearAllMocks(); }); it('should not rerender if config did not change', () => { const styles = { height: '350px', width: '350px', backgroundColor: 'white' }; const { rerender } = render(); expect(createEmbeddedSpy).toHaveBeenCalledTimes(1); rerender(); expect(createEmbeddedSpy).toHaveBeenCalledTimes(1); }); it('should rerender if config did change', () => { const { rerender } = render(); expect(createEmbeddedSpy).toHaveBeenCalledTimes(1); const newConfig = { ...config, token: 'new-test-token' }; rerender(); expect(createEmbeddedSpy).toHaveBeenCalledTimes(2); }); });