-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test(react-query): use vitest typecheck correctly with *.test-d.ts (#…
- Loading branch information
Showing
15 changed files
with
864 additions
and
1,117 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
142 changes: 142 additions & 0 deletions
142
packages/react-query/src/__tests__/infiniteQueryOptions.test-d.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
import { describe, expectTypeOf, it } from 'vitest' | ||
import { QueryClient } from '@tanstack/query-core' | ||
import { infiniteQueryOptions } from '../infiniteQueryOptions' | ||
import { useInfiniteQuery } from '../useInfiniteQuery' | ||
import { useSuspenseInfiniteQuery } from '../useSuspenseInfiniteQuery' | ||
import type { InfiniteData, dataTagSymbol } from '@tanstack/query-core' | ||
|
||
describe('queryOptions', () => { | ||
it('should not allow excess properties', () => { | ||
infiniteQueryOptions({ | ||
queryKey: ['key'], | ||
queryFn: () => Promise.resolve('data'), | ||
getNextPageParam: () => 1, | ||
initialPageParam: 1, | ||
// @ts-expect-error this is a good error, because stallTime does not exist! | ||
stallTime: 1000, | ||
}) | ||
}) | ||
it('should infer types for callbacks', () => { | ||
infiniteQueryOptions({ | ||
queryKey: ['key'], | ||
queryFn: () => Promise.resolve('data'), | ||
staleTime: 1000, | ||
getNextPageParam: () => 1, | ||
initialPageParam: 1, | ||
select: (data) => { | ||
expectTypeOf(data).toEqualTypeOf<InfiniteData<string, number>>() | ||
}, | ||
}) | ||
}) | ||
it('should work when passed to useInfiniteQuery', () => { | ||
const options = infiniteQueryOptions({ | ||
queryKey: ['key'], | ||
queryFn: () => Promise.resolve('string'), | ||
getNextPageParam: () => 1, | ||
initialPageParam: 1, | ||
}) | ||
|
||
const { data } = useInfiniteQuery(options) | ||
|
||
// known issue: type of pageParams is unknown when returned from useInfiniteQuery | ||
expectTypeOf(data).toEqualTypeOf< | ||
InfiniteData<string, unknown> | undefined | ||
>() | ||
}) | ||
it('should work when passed to useSuspenseInfiniteQuery', () => { | ||
const options = infiniteQueryOptions({ | ||
queryKey: ['key'], | ||
queryFn: () => Promise.resolve('string'), | ||
getNextPageParam: () => 1, | ||
initialPageParam: 1, | ||
}) | ||
|
||
const { data } = useSuspenseInfiniteQuery(options) | ||
|
||
expectTypeOf(data).toEqualTypeOf<InfiniteData<string, unknown>>() | ||
}) | ||
it('should work when passed to fetchInfiniteQuery', async () => { | ||
const options = infiniteQueryOptions({ | ||
queryKey: ['key'], | ||
queryFn: () => Promise.resolve('string'), | ||
getNextPageParam: () => 1, | ||
initialPageParam: 1, | ||
}) | ||
|
||
const data = await new QueryClient().fetchInfiniteQuery(options) | ||
|
||
expectTypeOf(data).toEqualTypeOf<InfiniteData<string, number>>() | ||
}) | ||
it('should tag the queryKey with the result type of the QueryFn', () => { | ||
const { queryKey } = infiniteQueryOptions({ | ||
queryKey: ['key'], | ||
queryFn: () => Promise.resolve('string'), | ||
getNextPageParam: () => 1, | ||
initialPageParam: 1, | ||
}) | ||
|
||
expectTypeOf<(typeof queryKey)[typeof dataTagSymbol]>().toEqualTypeOf< | ||
InfiniteData<string> | ||
>() | ||
}) | ||
it('should tag the queryKey even if no promise is returned', () => { | ||
const { queryKey } = infiniteQueryOptions({ | ||
queryKey: ['key'], | ||
queryFn: () => 'string', | ||
getNextPageParam: () => 1, | ||
initialPageParam: 1, | ||
}) | ||
|
||
expectTypeOf<(typeof queryKey)[typeof dataTagSymbol]>().toEqualTypeOf< | ||
InfiniteData<string> | ||
>() | ||
}) | ||
it('should tag the queryKey with the result type of the QueryFn if select is used', () => { | ||
const { queryKey } = infiniteQueryOptions({ | ||
queryKey: ['key'], | ||
queryFn: () => Promise.resolve('string'), | ||
select: (data) => data.pages, | ||
getNextPageParam: () => 1, | ||
initialPageParam: 1, | ||
}) | ||
|
||
expectTypeOf<(typeof queryKey)[typeof dataTagSymbol]>().toEqualTypeOf< | ||
InfiniteData<string> | ||
>() | ||
}) | ||
it('should return the proper type when passed to getQueryData', () => { | ||
const { queryKey } = infiniteQueryOptions({ | ||
queryKey: ['key'], | ||
queryFn: () => Promise.resolve('string'), | ||
getNextPageParam: () => 1, | ||
initialPageParam: 1, | ||
}) | ||
|
||
const queryClient = new QueryClient() | ||
const data = queryClient.getQueryData(queryKey) | ||
|
||
expectTypeOf(data).toEqualTypeOf< | ||
InfiniteData<string, unknown> | undefined | ||
>() | ||
}) | ||
it('should properly type when passed to setQueryData', () => { | ||
const { queryKey } = infiniteQueryOptions({ | ||
queryKey: ['key'], | ||
queryFn: () => Promise.resolve('string'), | ||
getNextPageParam: () => 1, | ||
initialPageParam: 1, | ||
}) | ||
|
||
const queryClient = new QueryClient() | ||
const data = queryClient.setQueryData(queryKey, (prev) => { | ||
expectTypeOf(prev).toEqualTypeOf< | ||
InfiniteData<string, unknown> | undefined | ||
>() | ||
return prev | ||
}) | ||
|
||
expectTypeOf(data).toEqualTypeOf< | ||
InfiniteData<string, unknown> | undefined | ||
>() | ||
}) | ||
}) |
177 changes: 0 additions & 177 deletions
177
packages/react-query/src/__tests__/infiniteQueryOptions.types.test.tsx
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.