UNPKG

@applicaster/quick-brick-core

Version:

Core package for Applicaster's Quick Brick App

143 lines (119 loc) 3.69 kB
import * as R from "ramda"; import React from "react"; import { View } from "react-native"; import { render } from "@testing-library/react-native"; import { ActionsContext } from "@applicaster/zapp-react-native-ui-components/Contexts/ActionsContext"; import { ActionsProvider } from "../ActionsProvider"; const FavouritesContext = React.createContext(null); const RemindersContext = React.createContext(null); const FavouritesProvider = (Component) => function FavouritesProviderWrapper(props) { React.useEffect(() => {}, []); return ( <FavouritesContext.Provider value="favourites"> <Component {...props} /> </FavouritesContext.Provider> ); }; const RemindersProvider = (Component) => function RemindersProviderWrapper(props) { return ( <RemindersContext.Provider value="reminders"> <Component {...props} /> </RemindersContext.Provider> ); }; const ContextConsumer = () => { const { actions } = React.useContext(ActionsContext); const favourites = React.useContext(FavouritesContext); const reminders = React.useContext(RemindersContext); return ( <View {...{ actions, favourites, reminders }} testID="context-consumer-view" /> ); }; const getConsumerView = (plugins) => { const wrapper = render( <ActionsProvider plugins={plugins}> <ContextConsumer /> </ActionsProvider> ); const { getByTestId } = wrapper; return getByTestId("context-consumer-view"); }; describe("Actions Provider", () => { const plugins = [ { identifier: "fake plugin" }, { identifier: "favs-action", module: { actionName: "faves", contextProvider: FavouritesProvider, context: FavouritesContext, }, }, ]; const wrapper = render( <ActionsProvider plugins={plugins}> <ContextConsumer /> </ActionsProvider> ); it("renders children", () => { expect(wrapper.toJSON()).toMatchSnapshot(); }); it("loads a correct action module", () => { const { props } = getConsumerView(plugins); expect(props.actions["favs-action"]).toBeDefined(); expect(props.favourites).toEqual("favourites"); }); describe("loads correct number of plugins", () => { it("loads one plugins", () => { const plugins = [ { identifier: "favs-action", module: { actionName: "faves", contextProvider: FavouritesProvider, context: FavouritesContext, }, }, ]; const { props } = getConsumerView(plugins); expect(R.toPairs(props.actions)).toHaveLength(1); }); it("loads two plugins", () => { const plugins = [ { identifier: "favs-action", module: { actionName: "faves", contextProvider: FavouritesProvider, context: FavouritesContext, }, }, { identifier: "reminders-action", module: { actionName: "reminders", contextProvider: RemindersProvider, context: RemindersContext, }, }, ]; const { props } = getConsumerView(plugins); expect(R.toPairs(props.actions)).toHaveLength(2); }); it("loads zero plugins", () => { const plugins = []; const { props } = getConsumerView(plugins); expect(R.toPairs(props.actions)).toHaveLength(0); }); }); it("Doesn't crash when plugins are undefined null, or empty", () => { expect(() => getConsumerView(null)).not.toThrow(); expect(() => getConsumerView(undefined)).not.toThrow(); expect(() => getConsumerView([])).not.toThrow(); }); });