import React from "react"; import { Text } from "react-native"; import { render, waitFor } from "@testing-library/react-native"; import { ScreenFeedLoader } from "../ScreenFeedLoader"; const mockUseFeedLoader = jest.fn(); const mockUseScreenContextV2 = jest.fn(); const mockSetState = jest.fn(); jest.mock("@applicaster/zapp-react-native-utils/reactHooks", () => ({ useFeedLoader: (...args) => mockUseFeedLoader(...args), })); jest.mock( "@applicaster/zapp-react-native-utils/reactHooks/screen/useScreenContext", () => ({ useScreenContextV2: (...args) => mockUseScreenContextV2(...args), }) ); describe("ScreenFeedLoader", () => { beforeEach(() => { jest.clearAllMocks(); mockUseScreenContextV2.mockReturnValue({ _feedStore: { setState: mockSetState, }, }); }); it("hides children while loading", () => { mockUseFeedLoader.mockReturnValue({ data: null, loading: true, error: null, }); const { queryByText } = render( child ); expect(queryByText("child")).toBeNull(); }); it("writes loaded feed data to _feedStore", async () => { const data = { entry: { id: "1" } }; mockUseFeedLoader.mockReturnValue({ data, loading: false, error: null, }); render( child ); await waitFor(() => { expect(mockSetState).toHaveBeenCalledWith({ screenFeed: data, screenFeedError: null, }); }); }); it("writes feed error to _feedStore", async () => { const error = new Error("feed failed"); const data = { fallback: true }; mockUseFeedLoader.mockReturnValue({ data, loading: false, error, }); render( child ); await waitFor(() => { expect(mockSetState).toHaveBeenCalledWith({ screenFeed: data, screenFeedError: error, }); }); }); });