Skip to content

Commit f2a02a9

Browse files
committed
test: add unit test
1 parent ceb36e9 commit f2a02a9

File tree

3 files changed

+127
-0
lines changed

3 files changed

+127
-0
lines changed

packages/openapi-react-query/test/fixtures/api.d.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,46 @@
44
*/
55

66
export interface paths {
7+
"/paginated-data": {
8+
parameters: {
9+
query?: never;
10+
header?: never;
11+
path?: never;
12+
cookie?: never;
13+
};
14+
get: {
15+
parameters: {
16+
query?: {
17+
limit?: number;
18+
};
19+
header?: never;
20+
path?: never;
21+
cookie?: never;
22+
};
23+
requestBody?: never;
24+
responses: {
25+
200: {
26+
headers: {
27+
[name: string]: unknown;
28+
};
29+
content: {
30+
"application/json": {
31+
items?: number[];
32+
nextPage?: number;
33+
};
34+
};
35+
};
36+
500: components["responses"]["Error"];
37+
};
38+
};
39+
put?: never;
40+
post?: never;
41+
delete?: never;
42+
options?: never;
43+
head?: never;
44+
patch?: never;
45+
trace?: never;
46+
};
747
"/comment": {
848
parameters: {
949
query?: never;

packages/openapi-react-query/test/fixtures/api.yaml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,28 @@ info:
33
title: Test Specification
44
version: "1.0"
55
paths:
6+
/paginated-data:
7+
get:
8+
parameters:
9+
- in: query
10+
name: limit
11+
schema:
12+
type: integer
13+
responses:
14+
200:
15+
content:
16+
application/json:
17+
schema:
18+
type: object
19+
properties:
20+
items:
21+
type: array
22+
items:
23+
type: integer
24+
nextPage:
25+
type: integer
26+
500:
27+
$ref: "#/components/responses/Error"
628
/comment:
729
put:
830
requestBody:

packages/openapi-react-query/test/index.test.tsx

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,4 +451,69 @@ describe("client", () => {
451451
});
452452
});
453453
});
454+
455+
describe("useInfiniteQuery", () => {
456+
it("should fetch data correctly with pagination", async () => {
457+
const fetchClient = createFetchClient<paths>({ baseUrl });
458+
const client = createClient(fetchClient);
459+
460+
useMockRequestHandler({
461+
baseUrl,
462+
method: "get",
463+
path: "/paginated-data",
464+
status: 200,
465+
body: { items: [1, 2, 3], nextPage: 1 },
466+
});
467+
468+
const { result } = renderHook(
469+
() => client.useInfiniteQuery("get", "/paginated-data", { limit: 3 }, {
470+
getNextPageParam: (lastPage) => lastPage.nextPage,
471+
initialPageParam: 0
472+
}),
473+
{ wrapper }
474+
);
475+
476+
await waitFor(() => expect(result.current.isSuccess).toBe(true));
477+
478+
expect((result.current.data as any).pages[0]).toEqual({ items: [1, 2, 3], nextPage: 1 });
479+
480+
// Set up mock for second page
481+
useMockRequestHandler({
482+
baseUrl,
483+
method: "get",
484+
path: "/paginated-data",
485+
status: 200,
486+
body: { items: [4, 5, 6], nextPage: 2 },
487+
});
488+
489+
await result.current.fetchNextPage();
490+
491+
await waitFor(() => expect(result.current.isFetching).toBe(false));
492+
493+
expect((result.current.data as any).pages).toHaveLength(2);
494+
expect((result.current.data as any).pages[1]).toEqual({ items: [4, 5, 6], nextPage: 2 });
495+
});
496+
497+
it("should handle errors correctly", async () => {
498+
const fetchClient = createFetchClient<paths>({ baseUrl });
499+
const client = createClient(fetchClient);
500+
501+
useMockRequestHandler({
502+
baseUrl,
503+
method: "get",
504+
path: "/paginated-data",
505+
status: 500,
506+
body: { code: 500, message: "Internal Server Error" },
507+
});
508+
509+
const { result } = renderHook(
510+
() => client.useInfiniteQuery("get", "/paginated-data", { limit: 3 }),
511+
{ wrapper }
512+
);
513+
514+
await waitFor(() => expect(result.current.isError).toBe(true));
515+
516+
expect(result.current.error).toEqual({ code: 500, message: "Internal Server Error" });
517+
});
518+
});
454519
});

0 commit comments

Comments
 (0)