11import { afterEach , beforeEach , describe , expect , test , vi } from 'vitest'
22import { fireEvent , render } from '@testing-library/svelte'
3+ import { sleep } from '@tanstack/query-test-utils'
34import BaseExample from './BaseExample.svelte'
45
56describe ( 'useMutationState' , ( ) => {
@@ -12,105 +13,104 @@ describe('useMutationState', () => {
1213 } )
1314
1415 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+ )
1922
2023 const rendered = render ( BaseExample , {
2124 props : {
2225 successMutationOpts : {
2326 mutationKey : [ 'success' ] ,
2427 mutationFn : successMutationFn ,
2528 } ,
26-
2729 errorMutationOpts : {
2830 mutationKey : [ 'error' ] ,
2931 mutationFn : errorMutationFn ,
3032 } ,
3133 } ,
3234 } )
3335
34- fireEvent . click ( rendered . getByTestId ( 'success' ) )
35- await vi . advanceTimersByTimeAsync ( 0 )
36+ fireEvent . click ( rendered . getByText ( 'success' ) )
37+ await vi . advanceTimersByTimeAsync ( 11 )
3638 expect ( successMutationFn ) . toHaveBeenCalledTimes ( 1 )
37- expect ( rendered . getByTestId ( 'result' ) . innerHTML ) . toEqual ( ' ["success"]')
39+ expect ( rendered . getByText ( ' ["success"]') ) . toBeInTheDocument ( )
3840
39- fireEvent . click ( rendered . getByTestId ( 'error' ) )
40- await vi . advanceTimersByTimeAsync ( 0 )
41+ fireEvent . click ( rendered . getByText ( 'error' ) )
42+ await vi . advanceTimersByTimeAsync ( 21 )
4143 expect ( errorMutationFn ) . toHaveBeenCalledTimes ( 1 )
42- expect ( rendered . getByTestId ( 'result' ) . innerHTML ) . toEqual (
43- '["success","error"]' ,
44- )
44+ expect ( rendered . getByText ( '["success","error"]' ) ) . toBeInTheDocument ( )
4545 } )
4646
4747 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+ )
5254
5355 const rendered = render ( BaseExample , {
5456 props : {
5557 successMutationOpts : {
5658 mutationKey : [ 'success' ] ,
5759 mutationFn : successMutationFn ,
5860 } ,
59-
6061 errorMutationOpts : {
6162 mutationKey : [ 'error' ] ,
6263 mutationFn : errorMutationFn ,
6364 } ,
64-
6565 mutationStateOpts : {
6666 filters : { status : 'error' } ,
6767 } ,
6868 } ,
6969 } )
7070
71- fireEvent . click ( rendered . getByTestId ( 'success' ) )
72- await vi . advanceTimersByTimeAsync ( 0 )
71+ fireEvent . click ( rendered . getByText ( 'success' ) )
72+ await vi . advanceTimersByTimeAsync ( 11 )
7373 expect ( successMutationFn ) . toHaveBeenCalledTimes ( 1 )
74- expect ( rendered . getByTestId ( 'result' ) . innerHTML ) . toEqual ( '[]' )
74+ expect ( rendered . getByText ( '[]' ) ) . toBeInTheDocument ( )
7575
76- fireEvent . click ( rendered . getByTestId ( 'error' ) )
77- await vi . advanceTimersByTimeAsync ( 0 )
76+ fireEvent . click ( rendered . getByText ( 'error' ) )
77+ await vi . advanceTimersByTimeAsync ( 21 )
7878 expect ( errorMutationFn ) . toHaveBeenCalledTimes ( 1 )
79- expect ( rendered . getByTestId ( 'result' ) . innerHTML ) . toEqual ( ' ["error"]')
79+ expect ( rendered . getByText ( ' ["error"]') ) . toBeInTheDocument ( )
8080 } )
8181
8282 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+ )
8789
8890 const rendered = render ( BaseExample , {
8991 props : {
9092 successMutationOpts : {
9193 mutationKey : [ 'success' ] ,
9294 mutationFn : successMutationFn ,
9395 } ,
94-
9596 errorMutationOpts : {
9697 mutationKey : [ 'error' ] ,
9798 mutationFn : errorMutationFn ,
9899 } ,
99-
100100 mutationStateOpts : {
101101 filters : { mutationKey : [ 'success' ] } ,
102102 } ,
103103 } ,
104104 } )
105105
106- fireEvent . click ( rendered . getByTestId ( 'success' ) )
107- await vi . advanceTimersByTimeAsync ( 0 )
106+ fireEvent . click ( rendered . getByText ( 'success' ) )
107+ await vi . advanceTimersByTimeAsync ( 11 )
108108 expect ( successMutationFn ) . toHaveBeenCalledTimes ( 1 )
109- expect ( rendered . getByTestId ( 'result' ) . innerHTML ) . toEqual ( ' ["success"]')
109+ expect ( rendered . getByText ( ' ["success"]') ) . toBeInTheDocument ( )
110110
111- fireEvent . click ( rendered . getByTestId ( 'error' ) )
112- await vi . advanceTimersByTimeAsync ( 0 )
111+ fireEvent . click ( rendered . getByText ( 'error' ) )
112+ await vi . advanceTimersByTimeAsync ( 21 )
113113 expect ( errorMutationFn ) . toHaveBeenCalledTimes ( 1 )
114- expect ( rendered . getByTestId ( 'result' ) . innerHTML ) . toEqual ( ' ["success"]')
114+ expect ( rendered . getByText ( ' ["success"]') ) . toBeInTheDocument ( )
115115 } )
116116} )
0 commit comments