Skip to content

Commit ce694c7

Browse files
committed
test(eslint-plugin-query/no-void-query-fn): add coverage for useInfiniteQuery, useSuspenseQuery, queryOptions, fetchQuery
The existing tests only exercised useQuery. The rule checks any object property named queryFn, so it applies equally to useInfiniteQuery, useSuspenseQuery, queryOptions(), and queryClient.fetchQuery(). Add valid + invalid cases for each to document and lock in that behavior.
1 parent 1047cdc commit ce694c7

1 file changed

Lines changed: 118 additions & 0 deletions

File tree

packages/eslint-plugin-query/src/__tests__/no-void-query-fn.test.ts

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,59 @@ ruleTester.run('no-void-query-fn', rule, {
162162
}
163163
`,
164164
},
165+
{
166+
name: 'useInfiniteQuery queryFn returns a value',
167+
code: normalizeIndent`
168+
import { useInfiniteQuery } from '@tanstack/react-query'
169+
170+
function Component() {
171+
const query = useInfiniteQuery({
172+
queryKey: ['test'],
173+
queryFn: ({ pageParam }) => ({ data: 'test', page: pageParam }),
174+
initialPageParam: 0,
175+
getNextPageParam: (lastPage) => undefined,
176+
})
177+
return null
178+
}
179+
`,
180+
},
181+
{
182+
name: 'useSuspenseQuery queryFn returns a value',
183+
code: normalizeIndent`
184+
import { useSuspenseQuery } from '@tanstack/react-query'
185+
186+
function Component() {
187+
const query = useSuspenseQuery({
188+
queryKey: ['test'],
189+
queryFn: () => ({ data: 'test' }),
190+
})
191+
return null
192+
}
193+
`,
194+
},
195+
{
196+
name: 'queryOptions queryFn returns a value',
197+
code: normalizeIndent`
198+
import { queryOptions } from '@tanstack/react-query'
199+
200+
const options = queryOptions({
201+
queryKey: ['test'],
202+
queryFn: () => ({ data: 'test' }),
203+
})
204+
`,
205+
},
206+
{
207+
name: 'fetchQuery queryFn returns a value',
208+
code: normalizeIndent`
209+
import { QueryClient } from '@tanstack/react-query'
210+
211+
const queryClient = new QueryClient()
212+
queryClient.fetchQuery({
213+
queryKey: ['test'],
214+
queryFn: () => fetch('/api/test').then((r) => r.json()),
215+
})
216+
`,
217+
},
165218
],
166219
invalid: [
167220
{
@@ -321,5 +374,70 @@ ruleTester.run('no-void-query-fn', rule, {
321374
`,
322375
errors: [{ messageId: 'noVoidReturn' }],
323376
},
377+
{
378+
name: 'useInfiniteQuery queryFn returns void',
379+
code: normalizeIndent`
380+
import { useInfiniteQuery } from '@tanstack/react-query'
381+
382+
function Component() {
383+
const query = useInfiniteQuery({
384+
queryKey: ['test'],
385+
queryFn: async ({ pageParam }) => {
386+
await fetch('/api/test?page=' + pageParam)
387+
},
388+
initialPageParam: 0,
389+
getNextPageParam: (lastPage) => undefined,
390+
})
391+
return null
392+
}
393+
`,
394+
errors: [{ messageId: 'noVoidReturn' }],
395+
},
396+
{
397+
name: 'useSuspenseQuery queryFn returns void',
398+
code: normalizeIndent`
399+
import { useSuspenseQuery } from '@tanstack/react-query'
400+
401+
function Component() {
402+
const query = useSuspenseQuery({
403+
queryKey: ['test'],
404+
queryFn: () => {
405+
console.log('fetching')
406+
},
407+
})
408+
return null
409+
}
410+
`,
411+
errors: [{ messageId: 'noVoidReturn' }],
412+
},
413+
{
414+
name: 'queryOptions queryFn returns void',
415+
code: normalizeIndent`
416+
import { queryOptions } from '@tanstack/react-query'
417+
418+
const options = queryOptions({
419+
queryKey: ['test'],
420+
queryFn: async () => {
421+
await fetch('/api/test')
422+
},
423+
})
424+
`,
425+
errors: [{ messageId: 'noVoidReturn' }],
426+
},
427+
{
428+
name: 'fetchQuery queryFn returns void',
429+
code: normalizeIndent`
430+
import { QueryClient } from '@tanstack/react-query'
431+
432+
const queryClient = new QueryClient()
433+
queryClient.fetchQuery({
434+
queryKey: ['test'],
435+
queryFn: async () => {
436+
await fetch('/api/test')
437+
},
438+
})
439+
`,
440+
errors: [{ messageId: 'noVoidReturn' }],
441+
},
324442
],
325443
})

0 commit comments

Comments
 (0)