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(); }); });