import React from "react";
import { View } from "react-native";
import { render } from "@testing-library/react-native";
import { NullFeedResolver } from "../resolvers/NullFeedResolver";
import { ReloadDataFunction } from "@applicaster/zapp-react-native-utils/reactHooks/feed/useFeedLoader";
type MockChildrenArgs = {
zappPipesData?: {
loading: boolean;
data?: any;
error?: Error | null;
};
reloadData?: ReloadDataFunction;
loadNextData?: () => void;
};
describe("NullFeedResolver", () => {
it("should render children with correct default props", () => {
const mockChildren = jest.fn((_args: MockChildrenArgs) => (
));
render({mockChildren});
expect(mockChildren).toHaveBeenCalledWith(
expect.objectContaining({
zappPipesData: {
url: "",
loading: false,
data: null,
error: null,
},
reloadData: expect.any(Function),
loadNextData: undefined,
})
);
});
it("should render children component", () => {
const { getByTestId } = render(
{() => }
);
expect(getByTestId("test-child")).toBeTruthy();
});
it("should create a memoized data object that doesn't change on re-renders", () => {
const mockChildren = jest.fn(() => );
const { rerender } = render(
{mockChildren}
);
expect(mockChildren).toHaveBeenCalled();
// @ts-ignore
const firstCallDataProps = mockChildren.mock.calls[0][0];
rerender({mockChildren});
// @ts-ignore
const secondCallDataProps = mockChildren.mock.calls[1][0];
expect(firstCallDataProps).toBe(secondCallDataProps);
});
it("should have reloadData function that returns null", () => {
const mockChildren = jest.fn(() => );
render({mockChildren});
expect(mockChildren).toHaveBeenCalled();
// @ts-ignore
const { reloadData } = mockChildren.mock.calls[0][0];
expect(reloadData()).toBeNull();
});
});