Skip to content

Commit c457082

Browse files
committed
Add type test for selects on useInfiniteQuery
1 parent d7853fa commit c457082

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

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

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,5 +1087,69 @@ describe("client", () => {
10871087
const allItems = result.current.data?.pages.flatMap((page) => page.items);
10881088
expect(allItems).toEqual([1, 2, 3, 4, 5, 6]);
10891089
});
1090+
it('should use return type from select option', async () => {
1091+
const fetchClient = createFetchClient<paths>({ baseUrl });
1092+
const client = createClient(fetchClient);
1093+
1094+
// First page request handler
1095+
const firstRequestHandler = useMockRequestHandler({
1096+
baseUrl,
1097+
method: "get",
1098+
path: "/paginated-data",
1099+
status: 200,
1100+
body: { items: [1, 2, 3], nextPage: 1 },
1101+
});
1102+
1103+
const { result, rerender } = renderHook(
1104+
() =>
1105+
client.useInfiniteQuery(
1106+
"get",
1107+
"/paginated-data",
1108+
{
1109+
params: {
1110+
query: {
1111+
limit: 3,
1112+
},
1113+
},
1114+
},
1115+
{
1116+
getNextPageParam: (lastPage) => lastPage.nextPage,
1117+
initialPageParam: 0,
1118+
select: (data) => data.pages.flatMap((page) => page.items).filter((item) => item !== undefined),
1119+
},
1120+
),
1121+
{ wrapper },
1122+
);
1123+
1124+
// Wait for initial query to complete
1125+
await waitFor(() => expect(result.current.isSuccess).toBe(true));
1126+
1127+
expectTypeOf(result.current.data).toEqualTypeOf<number[] | undefined>();
1128+
expect(result.current.data).toEqual([1, 2, 3]);
1129+
1130+
// Set up mock for second page before triggering next page fetch
1131+
const secondRequestHandler = useMockRequestHandler({
1132+
baseUrl,
1133+
method: "get",
1134+
path: "/paginated-data",
1135+
status: 200,
1136+
body: { items: [4, 5, 6], nextPage: 2 },
1137+
});
1138+
1139+
// Fetch next page
1140+
await act(async () => {
1141+
await result.current.fetchNextPage();
1142+
// Force a rerender to ensure state is updated
1143+
rerender();
1144+
});
1145+
1146+
// Wait for second page to be fetched and verify loading states
1147+
await waitFor(() => {
1148+
expect(result.current.isFetching).toBe(false);
1149+
expect(result.current.hasNextPage).toBe(true);
1150+
});
1151+
1152+
expect(result.current.data).toEqual([1, 2, 3, 4, 5, 6]);
1153+
});
10901154
});
10911155
});

0 commit comments

Comments
 (0)