Skip to content

Commit 289fe2e

Browse files
Zelys-DFKHsukvvon
andauthored
test(eslint-plugin-query/no-void-query-fn): add coverage for useInfiniteQuery, useSuspenseQuery, queryOptions, fetchQuery (#10332)
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. Co-authored-by: Wonsuk Choi <sukvvon@gmail.com>
1 parent a62f695 commit 289fe2e

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)