forked from TanStack/query
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuseIsMutating.test.tsx
108 lines (90 loc) · 2.83 KB
/
useIsMutating.test.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import { waitFor } from '@testing-library/react'
import React from 'react'
import { QueryClient } from '../../core'
import { useIsMutating } from '../useIsMutating'
import { useMutation } from '../useMutation'
import { renderWithClient, setActTimeout, sleep } from './utils'
describe('useIsMutating', () => {
it('should return the number of fetching mutations', async () => {
const isMutatings: number[] = []
const queryClient = new QueryClient()
function IsMutating() {
const isMutating = useIsMutating()
isMutatings.push(isMutating)
return null
}
function Page() {
const { mutate: mutate1 } = useMutation('mutation1', async () => {
await sleep(150)
return 'data'
})
const { mutate: mutate2 } = useMutation('mutation2', async () => {
await sleep(50)
return 'data'
})
React.useEffect(() => {
mutate1()
setActTimeout(() => {
mutate2()
}, 50)
}, [mutate1, mutate2])
return <IsMutating />
}
renderWithClient(queryClient, <Page />)
await waitFor(() => expect(isMutatings).toEqual([0, 1, 1, 2, 2, 1, 0]))
})
it('should filter correctly by mutationKey', async () => {
const isMutatings: number[] = []
const queryClient = new QueryClient()
function IsMutating() {
const isMutating = useIsMutating({ mutationKey: 'mutation1' })
isMutatings.push(isMutating)
return null
}
function Page() {
const { mutate: mutate1 } = useMutation('mutation1', async () => {
await sleep(100)
return 'data'
})
const { mutate: mutate2 } = useMutation('mutation2', async () => {
await sleep(100)
return 'data'
})
React.useEffect(() => {
mutate1()
mutate2()
}, [mutate1, mutate2])
return <IsMutating />
}
renderWithClient(queryClient, <Page />)
await waitFor(() => expect(isMutatings).toEqual([0, 1, 1, 1, 0, 0]))
})
it('should filter correctly by predicate', async () => {
const isMutatings: number[] = []
const queryClient = new QueryClient()
function IsMutating() {
const isMutating = useIsMutating({
predicate: mutation => mutation.options.mutationKey === 'mutation1',
})
isMutatings.push(isMutating)
return null
}
function Page() {
const { mutate: mutate1 } = useMutation('mutation1', async () => {
await sleep(100)
return 'data'
})
const { mutate: mutate2 } = useMutation('mutation2', async () => {
await sleep(100)
return 'data'
})
React.useEffect(() => {
mutate1()
mutate2()
}, [mutate1, mutate2])
return <IsMutating />
}
renderWithClient(queryClient, <Page />)
await waitFor(() => expect(isMutatings).toEqual([0, 1, 1, 1, 0, 0]))
})
})