UNPKG

@ledgerhq/live-common

Version:
176 lines • 7.09 kB
"use strict"; /** * @jest-environment jsdom */ Object.defineProperty(exports, "__esModule", { value: true }); const react_1 = require("@testing-library/react"); const useAssetsData_1 = require("../useAssetsData"); const api_1 = require("../../state-manager/api"); jest.mock("../../state-manager/api", () => ({ useGetAssetsDataInfiniteQuery: jest.fn(), })); const mockuseGetAssetsDataInfiniteQuery = jest.mocked(api_1.useGetAssetsDataInfiniteQuery); const defaultMockValues = { data: undefined, isLoading: false, error: undefined, fetchNextPage: jest.fn(), isSuccess: true, isFetching: false, isError: false, fetchPreviousPage: jest.fn(), isFetchingPreviousPage: false, refetch: jest.fn(), status: "success", }; describe("useAssetsData", () => { beforeEach(() => { jest.clearAllMocks(); }); it("should return loading state when API is loading", () => { mockuseGetAssetsDataInfiniteQuery.mockReturnValue({ ...defaultMockValues, isLoading: true, status: "pending", }); const { result } = (0, react_1.renderHook)(() => (0, useAssetsData_1.useAssetsData)({ product: "lld", version: "1.0.0" })); expect(result.current.isLoading).toBe(true); expect(result.current.data).toBe(undefined); }); it("should return combined data from multiple pages", () => { const mockPages = [ { cryptoAssets: { bitcoin: { id: "bitcoin", name: "Bitcoin" } }, networks: { bitcoin: { id: "bitcoin", name: "Bitcoin" } }, cryptoOrTokenCurrencies: { bitcoin: { id: "bitcoin" } }, interestRates: {}, markets: {}, currenciesOrder: { currenciesIds: ["bitcoin"], metaCurrencyIds: ["bitcoin"], key: "marketCap", order: "desc", }, pagination: { nextCursor: "cursor-2" }, }, { cryptoAssets: { ethereum: { id: "ethereum", name: "Ethereum" } }, networks: { ethereum: { id: "ethereum", name: "Ethereum" } }, cryptoOrTokenCurrencies: { ethereum: { id: "ethereum" } }, interestRates: {}, markets: {}, currenciesOrder: { currenciesIds: ["ethereum"], metaCurrencyIds: ["ethereum"], key: "marketCap", order: "desc", }, pagination: { nextCursor: undefined }, }, ]; mockuseGetAssetsDataInfiniteQuery.mockReturnValue({ ...defaultMockValues, data: { pages: mockPages, pageParams: [{ cursor: "" }, { cursor: "cursor-2" }] }, }); const { result } = (0, react_1.renderHook)(() => (0, useAssetsData_1.useAssetsData)({ product: "lld", version: "1.0.0" })); expect(result.current.data).toEqual({ cryptoAssets: { bitcoin: { id: "bitcoin", name: "Bitcoin" }, ethereum: { id: "ethereum", name: "Ethereum" }, }, networks: { bitcoin: { id: "bitcoin", name: "Bitcoin" }, ethereum: { id: "ethereum", name: "Ethereum" }, }, cryptoOrTokenCurrencies: { bitcoin: { id: "bitcoin" }, ethereum: { id: "ethereum" }, }, interestRates: {}, markets: {}, currenciesOrder: { currenciesIds: ["bitcoin", "ethereum"], metaCurrencyIds: ["bitcoin", "ethereum"], key: "marketCap", order: "desc", }, pagination: { nextCursor: undefined }, }); expect(result.current.isLoading).toBe(false); }); it("should return error when API has error", () => { const mockError = new Error("API Error"); mockuseGetAssetsDataInfiniteQuery.mockReturnValue({ ...defaultMockValues, data: undefined, error: mockError, isSuccess: false, isError: true, status: "error", }); const { result } = (0, react_1.renderHook)(() => (0, useAssetsData_1.useAssetsData)({ product: "lld", version: "1.0.0" })); expect(result.current.error).toBe(mockError); expect(result.current.isLoading).toBe(false); }); it("should provide loadNext function when there's a nextCursor", () => { const mockFetchNextPage = jest.fn(); const mockPages = [ { cryptoAssets: {}, networks: {}, cryptoOrTokenCurrencies: {}, interestRates: {}, markets: {}, currenciesOrder: { currenciesIds: [], metaCurrencyIds: [], key: "marketCap", order: "desc", }, pagination: { nextCursor: "next-cursor-456" }, }, ]; mockuseGetAssetsDataInfiniteQuery.mockReturnValue({ ...defaultMockValues, data: { pages: mockPages, pageParams: [{ cursor: "" }] }, fetchNextPage: mockFetchNextPage, }); const { result } = (0, react_1.renderHook)(() => (0, useAssetsData_1.useAssetsData)({ product: "lld", version: "1.0.0" })); expect(result.current.loadNext).toBeDefined(); result.current.loadNext?.(); expect(mockFetchNextPage).toHaveBeenCalled(); }); it("should not provide loadNext function when there's no nextCursor", () => { const mockPages = [ { cryptoAssets: {}, networks: {}, cryptoOrTokenCurrencies: {}, interestRates: {}, markets: {}, currenciesOrder: { currenciesIds: [], metaCurrencyIds: [], key: "marketCap", order: "desc", }, pagination: { nextCursor: undefined }, }, ]; mockuseGetAssetsDataInfiniteQuery.mockReturnValue({ ...defaultMockValues, data: { pages: mockPages, pageParams: [{ cursor: "" }] }, }); const { result } = (0, react_1.renderHook)(() => (0, useAssetsData_1.useAssetsData)({ product: "lld", version: "1.0.0" })); expect(result.current.loadNext).toBeUndefined(); }); it("should return undefined data when no pages exist", () => { mockuseGetAssetsDataInfiniteQuery.mockReturnValue({ ...defaultMockValues, }); const { result } = (0, react_1.renderHook)(() => (0, useAssetsData_1.useAssetsData)({ product: "lld", version: "1.0.0" })); expect(result.current.data).toBeUndefined(); expect(result.current.loadNext).toBeUndefined(); }); }); //# sourceMappingURL=useAssetsData.test.js.map