import { requestToSkipHook } from "../networkService"; const mockCall = jest.fn(); const mockBuildAxiosRequest = jest.fn(); let mockHelper: Record; jest.mock("@applicaster/zapp-pipes-v2-client", () => ({ RequestBuilder: jest.fn().mockImplementation(() => ({ setEntryContext: jest.fn().mockReturnThis(), setScreenContext: jest.fn().mockReturnThis(), setUrl: jest.fn().mockReturnThis(), buildAxiosRequest: (...args) => mockBuildAxiosRequest(...args), call: (...args) => mockCall(...args), })), PipesClientResponseHelper: jest.fn().mockImplementation(() => mockHelper), })); jest.mock("../logger", () => ({ log_debug: jest.fn(), log_error: jest.fn(), log_info: jest.fn(), })); const dataSource = { source: "https://skip-endpoint", mapping: {} }; const payload = { id: "entry-1" }; describe("requestToSkipHook", () => { beforeEach(() => { jest.clearAllMocks(); mockBuildAxiosRequest.mockResolvedValue({ url: "https://skip-endpoint" }); mockCall.mockResolvedValue({}); mockHelper = { error: null, statusCode: 200, responseData: null, getLogsData: jest.fn(() => ({})), }; }); it("returns true when the endpoint returns a non-empty body", async () => { mockHelper.responseData = true; await expect(requestToSkipHook(dataSource, payload)).resolves.toBe(true); }); it("treats any truthy payload as skip (hook-screen-wrapper contract)", async () => { mockHelper.responseData = { entry: [] }; await expect(requestToSkipHook(dataSource, payload)).resolves.toBe(true); }); it("returns false when the endpoint returns an empty body", async () => { mockHelper.responseData = null; await expect(requestToSkipHook(dataSource, payload)).resolves.toBe(false); }); it("throws when the response contains an error", async () => { mockHelper.error = new Error("server error"); await expect(requestToSkipHook(dataSource, payload)).rejects.toThrow( "server error" ); }); it("throws when the request itself fails", async () => { mockCall.mockRejectedValue(new Error("network down")); await expect(requestToSkipHook(dataSource, payload)).rejects.toThrow( "network down" ); }); });