import React, { ReactElement } from 'react'; import { MemoryRouter, Route, StaticRouter } from 'react-router-dom'; import { Provider } from 'react-redux'; import { mount } from 'enzyme'; import { act } from 'react-dom/test-utils'; import { store as appStore } from 'redux/store'; import { ThemeProvider } from 'styled-components'; import theme from 'theme/theme'; import { render, RenderOptions } from '@testing-library/react'; import { AnyAction, Store } from 'redux'; import { RootState } from 'redux/interfaces'; import { configureStore } from '@reduxjs/toolkit'; import rootReducer from 'redux/reducers'; import mockStoreCreator from 'redux/store/configureStore/mockStoreCreator'; interface TestRouterWrapperProps { pathname: string; urlParams: { [key: string]: string; }; } export const TestRouterWrapper: React.FC = ({ children, pathname, urlParams, }) => ( acc.replace(`:${param}`, urlParams[param]), pathname ), }, ]} > {children} ); export const containerRendersView = ( container: React.ReactElement, // eslint-disable-next-line @typescript-eslint/no-explicit-any view: React.FC ) => { describe('container', () => { it('renders view', async () => { let wrapper = mount(
); await act(async () => { wrapper = mount( {container} ); }); expect(wrapper.exists(view)).toBeTruthy(); }); }); }; export function mountWithTheme(child: ReactElement) { return mount(child, { wrappingComponent: ({ children }) => ( {children} ), }); } interface CustomRenderOptions extends Omit { preloadedState?: Partial; store?: Store, AnyAction>; pathname?: string; } const customRender = ( ui: ReactElement, { preloadedState, store = configureStore({ reducer: rootReducer, preloadedState, }), pathname, ...renderOptions }: CustomRenderOptions = {} ) => { // overrides @testing-library/react render. const AllTheProviders: React.FC = ({ children }) => { return ( {children} ); }; return render(ui, { wrapper: AllTheProviders, ...renderOptions }); }; export { customRender as render }; export class EventSourceMock { url: string; close: () => void; open: () => void; error: () => void; onmessage: () => void; constructor(url: string) { this.url = url; this.open = jest.fn(); this.error = jest.fn(); this.onmessage = jest.fn(); this.close = jest.fn(); } } export const getTypeAndPayload = (store: typeof mockStoreCreator) => { return store.getActions().map(({ type, payload }) => ({ type, payload })); };