import * as React from "react";
import { View } from "react-native";
import { renderWithProviders } from "@applicaster/zapp-react-native-utils/testUtils";
import { ZappUIComponent } from "../index";
const onLoadFinished = jest.fn();
const zappPipesData_loading = {
loading: true,
};
const zappPipesData_error = {
loading: false,
error: { message: "oups" },
};
const zappPipesData_success = {
loading: false,
data: { type: { value: "feed" } },
};
const MockComponent = (props) => ;
export const ReactContext = {
Provider: jest.fn(({ children }) => children),
};
const Component = (props: { component: React.ReactNode }) => (
);
const ErrorComponent = (props) => ;
const LoadingComponent = (props) => ;
function getProps(zappPipesData) {
return {
component: {
rules: {},
},
onLoadFinished,
zappPipesData,
};
}
function getWrapper({ error, loading, props }) {
const WrappedComponent = ZappUIComponent({
Component,
ErrorComponent: error ? ErrorComponent : null,
LoadingComponent: loading ? LoadingComponent : null,
});
return renderWithProviders(
);
}
describe("ZappUIComponent", () => {
describe("when zapp pipes data is loading", () => {
const props = getProps(zappPipesData_loading);
it("renders placeholder component if no loading component is provided", () => {
const wrapper = getWrapper({ props });
const testView = wrapper.getByTestId("ZappUIComponent-placeholder");
expect(testView.props).toBeDefined();
});
it("renders correctly otherwise", () => {
const wrapper = getWrapper({ props, loading: true });
const testView = wrapper.getByTestId("test-view");
expect(testView.props.name).toBe("loading");
});
});
describe("whenn zapp pipes data returns with error", () => {
const props = getProps(zappPipesData_error);
it("renders null if no error component is provided", () => {
const wrapper = getWrapper({ props });
expect(wrapper.queryByTestId("test-view")).toBeNull();
});
it("renders correctly otherwise", () => {
const wrapper = getWrapper({ props, error: true });
const testView = wrapper.getByTestId("test-view");
expect(testView.props.name).toBe("error");
});
});
describe("when zapp pipes data returns properly", () => {
const props = getProps(zappPipesData_success);
it("renders correctly", () => {
const wrapper = getWrapper({ props });
const testView = wrapper.getByTestId("test-view");
expect(testView.props.name).toBe("success");
});
});
});