@applicaster/quick-brick-core
Version:
Core package for Applicaster's Quick Brick App
143 lines (119 loc) • 3.69 kB
JavaScript
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();
});
});