1
1
import { afterEach , beforeEach , describe , expect , test , vi } from 'vitest'
2
2
import { fireEvent , render } from '@testing-library/svelte'
3
+ import { sleep } from '@tanstack/query-test-utils'
3
4
import BaseExample from './BaseExample.svelte'
4
5
5
6
describe ( 'useMutationState' , ( ) => {
@@ -12,105 +13,104 @@ describe('useMutationState', () => {
12
13
} )
13
14
14
15
test ( 'Run few mutation functions and check from useMutationState' , async ( ) => {
15
- const successMutationFn = vi . fn ( )
16
- const errorMutationFn = vi . fn ( ) . mockImplementation ( ( ) => {
17
- throw 'error'
18
- } )
16
+ const successMutationFn = vi . fn ( ( ) => sleep ( 10 ) . then ( ( ) => 'data' ) )
17
+ const errorMutationFn = vi
18
+ . fn ( )
19
+ . mockImplementation ( ( ) =>
20
+ sleep ( 20 ) . then ( ( ) => Promise . reject ( new Error ( 'error' ) ) ) ,
21
+ )
19
22
20
23
const rendered = render ( BaseExample , {
21
24
props : {
22
25
successMutationOpts : {
23
26
mutationKey : [ 'success' ] ,
24
27
mutationFn : successMutationFn ,
25
28
} ,
26
-
27
29
errorMutationOpts : {
28
30
mutationKey : [ 'error' ] ,
29
31
mutationFn : errorMutationFn ,
30
32
} ,
31
33
} ,
32
34
} )
33
35
34
- fireEvent . click ( rendered . getByTestId ( 'success' ) )
35
- await vi . advanceTimersByTimeAsync ( 0 )
36
+ fireEvent . click ( rendered . getByText ( 'success' ) )
37
+ await vi . advanceTimersByTimeAsync ( 11 )
36
38
expect ( successMutationFn ) . toHaveBeenCalledTimes ( 1 )
37
- expect ( rendered . getByTestId ( 'result' ) . innerHTML ) . toEqual ( ' ["success"]')
39
+ expect ( rendered . getByText ( ' ["success"]') ) . toBeInTheDocument ( )
38
40
39
- fireEvent . click ( rendered . getByTestId ( 'error' ) )
40
- await vi . advanceTimersByTimeAsync ( 0 )
41
+ fireEvent . click ( rendered . getByText ( 'error' ) )
42
+ await vi . advanceTimersByTimeAsync ( 21 )
41
43
expect ( errorMutationFn ) . toHaveBeenCalledTimes ( 1 )
42
- expect ( rendered . getByTestId ( 'result' ) . innerHTML ) . toEqual (
43
- '["success","error"]' ,
44
- )
44
+ expect ( rendered . getByText ( '["success","error"]' ) ) . toBeInTheDocument ( )
45
45
} )
46
46
47
47
test ( 'Can select specific type of mutation ( i.e: error only )' , async ( ) => {
48
- const successMutationFn = vi . fn ( )
49
- const errorMutationFn = vi . fn ( ) . mockImplementation ( ( ) => {
50
- throw 'error'
51
- } )
48
+ const successMutationFn = vi . fn ( ( ) => sleep ( 10 ) . then ( ( ) => 'data' ) )
49
+ const errorMutationFn = vi
50
+ . fn ( )
51
+ . mockImplementation ( ( ) =>
52
+ sleep ( 20 ) . then ( ( ) => Promise . reject ( new Error ( 'error' ) ) ) ,
53
+ )
52
54
53
55
const rendered = render ( BaseExample , {
54
56
props : {
55
57
successMutationOpts : {
56
58
mutationKey : [ 'success' ] ,
57
59
mutationFn : successMutationFn ,
58
60
} ,
59
-
60
61
errorMutationOpts : {
61
62
mutationKey : [ 'error' ] ,
62
63
mutationFn : errorMutationFn ,
63
64
} ,
64
-
65
65
mutationStateOpts : {
66
66
filters : { status : 'error' } ,
67
67
} ,
68
68
} ,
69
69
} )
70
70
71
- fireEvent . click ( rendered . getByTestId ( 'success' ) )
72
- await vi . advanceTimersByTimeAsync ( 0 )
71
+ fireEvent . click ( rendered . getByText ( 'success' ) )
72
+ await vi . advanceTimersByTimeAsync ( 11 )
73
73
expect ( successMutationFn ) . toHaveBeenCalledTimes ( 1 )
74
- expect ( rendered . getByTestId ( 'result' ) . innerHTML ) . toEqual ( '[]' )
74
+ expect ( rendered . getByText ( '[]' ) ) . toBeInTheDocument ( )
75
75
76
- fireEvent . click ( rendered . getByTestId ( 'error' ) )
77
- await vi . advanceTimersByTimeAsync ( 0 )
76
+ fireEvent . click ( rendered . getByText ( 'error' ) )
77
+ await vi . advanceTimersByTimeAsync ( 21 )
78
78
expect ( errorMutationFn ) . toHaveBeenCalledTimes ( 1 )
79
- expect ( rendered . getByTestId ( 'result' ) . innerHTML ) . toEqual ( ' ["error"]')
79
+ expect ( rendered . getByText ( ' ["error"]') ) . toBeInTheDocument ( )
80
80
} )
81
81
82
82
test ( 'Can select specific mutation using mutation key' , async ( ) => {
83
- const successMutationFn = vi . fn ( )
84
- const errorMutationFn = vi . fn ( ) . mockImplementation ( ( ) => {
85
- throw 'error'
86
- } )
83
+ const successMutationFn = vi . fn ( ( ) => sleep ( 10 ) . then ( ( ) => 'data' ) )
84
+ const errorMutationFn = vi
85
+ . fn ( )
86
+ . mockImplementation ( ( ) =>
87
+ sleep ( 20 ) . then ( ( ) => Promise . reject ( new Error ( 'error' ) ) ) ,
88
+ )
87
89
88
90
const rendered = render ( BaseExample , {
89
91
props : {
90
92
successMutationOpts : {
91
93
mutationKey : [ 'success' ] ,
92
94
mutationFn : successMutationFn ,
93
95
} ,
94
-
95
96
errorMutationOpts : {
96
97
mutationKey : [ 'error' ] ,
97
98
mutationFn : errorMutationFn ,
98
99
} ,
99
-
100
100
mutationStateOpts : {
101
101
filters : { mutationKey : [ 'success' ] } ,
102
102
} ,
103
103
} ,
104
104
} )
105
105
106
- fireEvent . click ( rendered . getByTestId ( 'success' ) )
107
- await vi . advanceTimersByTimeAsync ( 0 )
106
+ fireEvent . click ( rendered . getByText ( 'success' ) )
107
+ await vi . advanceTimersByTimeAsync ( 11 )
108
108
expect ( successMutationFn ) . toHaveBeenCalledTimes ( 1 )
109
- expect ( rendered . getByTestId ( 'result' ) . innerHTML ) . toEqual ( ' ["success"]')
109
+ expect ( rendered . getByText ( ' ["success"]') ) . toBeInTheDocument ( )
110
110
111
- fireEvent . click ( rendered . getByTestId ( 'error' ) )
112
- await vi . advanceTimersByTimeAsync ( 0 )
111
+ fireEvent . click ( rendered . getByText ( 'error' ) )
112
+ await vi . advanceTimersByTimeAsync ( 21 )
113
113
expect ( errorMutationFn ) . toHaveBeenCalledTimes ( 1 )
114
- expect ( rendered . getByTestId ( 'result' ) . innerHTML ) . toEqual ( ' ["success"]')
114
+ expect ( rendered . getByText ( ' ["success"]') ) . toBeInTheDocument ( )
115
115
} )
116
116
} )
0 commit comments