|
1 |
| -import { afterAll, beforeAll, describe, expect, it } from "vitest"; |
2 |
| -import { server, baseUrl, useMockRequestHandler } from "./fixtures/mock-server.js"; |
3 |
| -import type { paths } from "./fixtures/api.js"; |
4 |
| -import createClient from "../src/index.js"; |
5 |
| -import createFetchClient from "openapi-fetch"; |
6 |
| -import { fireEvent, render, renderHook, screen, waitFor, act } from "@testing-library/react"; |
7 | 1 | import {
|
8 | 2 | QueryClient,
|
9 | 3 | QueryClientProvider,
|
| 4 | + skipToken, |
10 | 5 | useQueries,
|
11 | 6 | useQuery,
|
12 | 7 | useSuspenseQuery,
|
13 |
| - skipToken, |
14 | 8 | } from "@tanstack/react-query";
|
| 9 | +import { act, fireEvent, render, renderHook, screen, waitFor } from "@testing-library/react"; |
| 10 | +import createFetchClient from "openapi-fetch"; |
15 | 11 | import { Suspense, type ReactNode } from "react";
|
16 | 12 | import { ErrorBoundary } from "react-error-boundary";
|
| 13 | +import { afterAll, beforeAll, describe, expect, it } from "vitest"; |
| 14 | +import createClient from "../src/index.js"; |
| 15 | +import type { paths } from "./fixtures/api.js"; |
| 16 | +import { baseUrl, server, useMockRequestHandler } from "./fixtures/mock-server.js"; |
17 | 17 |
|
18 | 18 | type minimalGetPaths = {
|
19 | 19 | // Without parameters.
|
@@ -789,4 +789,65 @@ describe("client", () => {
|
789 | 789 | });
|
790 | 790 | });
|
791 | 791 | });
|
| 792 | + describe("useInfiniteQuery", () => { |
| 793 | + it("should fetch data correctly with pagination", async () => { |
| 794 | + const fetchClient = createFetchClient<paths>({ baseUrl }); |
| 795 | + const client = createClient(fetchClient); |
| 796 | + |
| 797 | + useMockRequestHandler({ |
| 798 | + baseUrl, |
| 799 | + method: "get", |
| 800 | + path: "/paginated-data", |
| 801 | + status: 200, |
| 802 | + body: { items: [1, 2, 3], nextPage: 1 }, |
| 803 | + }); |
| 804 | + |
| 805 | + const { result } = renderHook( |
| 806 | + () => client.useInfiniteQuery("get", "/paginated-data", { params: { query: { limit: 3 } } }), |
| 807 | + { wrapper }, |
| 808 | + ); |
| 809 | + |
| 810 | + await waitFor(() => expect(result.current.isSuccess).toBe(true)); |
| 811 | + |
| 812 | + expect((result.current.data as any).pages[0]).toEqual({ items: [1, 2, 3], nextPage: 1 }); |
| 813 | + |
| 814 | + // Set up mock for second page |
| 815 | + useMockRequestHandler({ |
| 816 | + baseUrl, |
| 817 | + method: "get", |
| 818 | + path: "/paginated-data", |
| 819 | + status: 200, |
| 820 | + body: { items: [4, 5, 6], nextPage: 2 }, |
| 821 | + }); |
| 822 | + |
| 823 | + await result.current.fetchNextPage(); |
| 824 | + |
| 825 | + await waitFor(() => expect(result.current.isFetching).toBe(false)); |
| 826 | + |
| 827 | + expect((result.current.data as any).pages).toHaveLength(2); |
| 828 | + expect((result.current.data as any).pages[1]).toEqual({ items: [4, 5, 6], nextPage: 2 }); |
| 829 | + }); |
| 830 | + |
| 831 | + it("should handle errors correctly", async () => { |
| 832 | + const fetchClient = createFetchClient<paths>({ baseUrl }); |
| 833 | + const client = createClient(fetchClient); |
| 834 | + |
| 835 | + useMockRequestHandler({ |
| 836 | + baseUrl, |
| 837 | + method: "get", |
| 838 | + path: "/paginated-data", |
| 839 | + status: 500, |
| 840 | + body: { code: 500, message: "Internal Server Error" }, |
| 841 | + }); |
| 842 | + |
| 843 | + const { result } = renderHook( |
| 844 | + () => client.useInfiniteQuery("get", "/paginated-data", { params: { query: { limit: 3 } } }), |
| 845 | + { wrapper }, |
| 846 | + ); |
| 847 | + |
| 848 | + await waitFor(() => expect(result.current.isError).toBe(true)); |
| 849 | + |
| 850 | + expect(result.current.error).toEqual({ code: 500, message: "Internal Server Error" }); |
| 851 | + }); |
| 852 | + }); |
792 | 853 | });
|
0 commit comments