import { SafeAreaProvider } from "react-native-safe-area-context"; import { render } from "@testing-library/react-native"; import React, { PropsWithChildren } from "react"; import configureStore from "redux-mock-store"; import { Provider } from "react-redux"; import { View } from "react-native"; import thunk from "redux-thunk"; import * as R from "ramda"; import { appStore } from "@applicaster/zapp-react-native-redux/AppStore"; import { ThemeContext } from "../theme"; import { AnalyticsProvider } from "../analyticsUtils"; export { getByTestId } from "./getByTestId"; /** Helper function for react-test-renderer, accepts type and renderer * * @param {*} type React Component type instance or name of component * * @param {*} renderer renderer instance */ export const findByType = (type, renderer) => { try { renderer.root ? renderer.root.findByType(type) : renderer.findByType(type); } catch { return undefined; } }; export function createComponentMock(mockName, hasChildren = false) { return hasChildren ? jest.fn(({ children }) => ( {typeof children === "function" ? children() : children} )) : jest.fn(() => ); } const initialState = { styles: {}, remoteConfigurations: { styles: {}, }, components: { River: createComponentMock("river"), AppContainer: createComponentMock("appContainer", true), DisplayError: createComponentMock("displayError"), }, rivers: { id: "A1234", home: true }, appSettings: {}, plugins: [], appState: { appReady: true, appLaunched: true }, pluginConfigurations: {}, appData: { layoutVersion: "v1" }, zappPipes: {}, contentTypes: null, }; export const WrappedWithProviders = ({ children, store: storeObj = {}, }: any) => { const _store = configureStore([thunk])( R.mergeDeepRight(initialState, { ...storeObj }) ); appStore.set(_store); return ( {}, }} > {children} ); }; /** * Helper test function - replacement of render() - with providers * @param component component to render in test * @param store optional store to pass to the provider * @returns */ export const renderWithProviders = (component, storeObj?: unknown) => { return render(component, { wrapper: function TestWrapper({ children }: PropsWithChildren) { return ( {children} ); }, }); };