diff --git a/packages/bot-web-ui/src/components/load-modal/__tests__/recent-footer.spec.tsx b/packages/bot-web-ui/src/components/load-modal/__tests__/recent-footer.spec.tsx new file mode 100644 index 000000000000..f662a937cb13 --- /dev/null +++ b/packages/bot-web-ui/src/components/load-modal/__tests__/recent-footer.spec.tsx @@ -0,0 +1,63 @@ +import React from 'react'; +import { mockStore, StoreProvider } from '@deriv/stores'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { render, screen, waitFor } from '@testing-library/react'; +// eslint-disable-next-line import/no-extraneous-dependencies +import userEvent from '@testing-library/user-event'; +import { mock_ws } from 'Utils/mock'; +import RootStore from 'Stores/root-store'; +import { DBotStoreProvider, mockDBotStore } from 'Stores/useDBotStore'; +import RecentFooter from '../recent-footer'; + +jest.mock('@deriv/bot-skeleton/src/scratch/blockly', () => jest.fn()); +jest.mock('@deriv/bot-skeleton/src/scratch/dbot', () => ({ + saveRecentWorkspace: jest.fn(), + unHighlightAllBlocks: jest.fn(), +})); +jest.mock('@deriv/bot-skeleton/src/scratch/hooks/block_svg', () => jest.fn()); + +window.Blockly = { + derivWorkspace: { asyncClear: () => ({}) }, + Xml: { domToWorkspace: () => ({}), textToDom: () => ({}) }, +}; + +describe('RecentFooter', () => { + let wrapper: ({ children }: { children: JSX.Element }) => JSX.Element, mock_DBot_store: RootStore | undefined; + + beforeAll(() => { + const mock_store = mockStore({}); + mock_DBot_store = mockDBotStore(mock_store, mock_ws); + + wrapper = ({ children }: { children: JSX.Element }) => ( + + + {children} + + + ); + }); + + it('should render RecentFooter', () => { + const { container } = render(, { wrapper }); + expect(container).toBeInTheDocument(); + }); + + it('should render button with Open text without loader', () => { + render(, { wrapper }); + const openButton = screen.getByText('Open'); + expect(openButton).toBeInTheDocument(); + expect(mock_DBot_store?.load_modal?.is_open_button_loading).toBeFalsy(); + }); + + it('should render import message and close load modal on open button click', async () => { + mock_DBot_store?.load_modal?.toggleLoadModal(); + render(, { wrapper }); + const openButton = screen.getByText('Open'); + userEvent.click(openButton); + + await waitFor(() => { + expect(mock_DBot_store?.load_modal?.is_load_modal_open).toBeFalsy(); + expect(mock_DBot_store?.dashboard?.toast_message).toBe('import'); + }); + }); +}); diff --git a/packages/bot-web-ui/src/stores/load-modal-store.ts b/packages/bot-web-ui/src/stores/load-modal-store.ts index 70038f898415..a28d6f0824dc 100644 --- a/packages/bot-web-ui/src/stores/load-modal-store.ts +++ b/packages/bot-web-ui/src/stores/load-modal-store.ts @@ -6,8 +6,6 @@ import { localize } from '@deriv/translations'; import { clearInjectionDiv, tabs_title } from 'Constants/load-modal'; import { TStrategy } from 'Types'; -const Blockly = window.Blockly; - interface ILoadModalStore { active_index: number; is_load_modal_open: boolean;