@@ -77,8 +77,33 @@ describe('useDelete', () => {
7777 } ) ;
7878
7979 it ( 'uses the latest declaration time mutationMode' , async ( ) => {
80+ const posts = [
81+ { id : 1 , title : 'Hello' } ,
82+ { id : 2 , title : 'World' } ,
83+ ] ;
84+ let resolveDelete : ( ( ) => void ) | undefined ;
85+ const dataProvider = {
86+ getList : ( ) =>
87+ Promise . resolve ( {
88+ data : posts ,
89+ total : posts . length ,
90+ } ) ,
91+ delete : jest . fn ( ( _ , params ) => {
92+ return new Promise ( resolve => {
93+ resolveDelete = ( ) => {
94+ const index = posts . findIndex (
95+ post => post . id === params . id
96+ ) ;
97+ if ( index !== - 1 ) {
98+ posts . splice ( index , 1 ) ;
99+ }
100+ resolve ( { data : params . previousData } ) ;
101+ } ;
102+ } ) ;
103+ } ) ,
104+ } as any ;
80105 // This story uses the pessimistic mode by default
81- render ( < MutationMode /> ) ;
106+ render ( < MutationMode dataProvider = { dataProvider } /> ) ;
82107 await waitFor ( ( ) => new Promise ( resolve => setTimeout ( resolve , 0 ) ) ) ;
83108 fireEvent . click ( screen . getByText ( 'Change mutation mode to optimistic' ) ) ;
84109 fireEvent . click ( screen . getByText ( 'Delete first post' ) ) ;
@@ -89,36 +114,38 @@ describe('useDelete', () => {
89114 expect ( screen . queryByText ( 'World' ) ) . not . toBeNull ( ) ;
90115 expect ( screen . queryByText ( 'mutating' ) ) . not . toBeNull ( ) ;
91116 } ) ;
92- await waitFor (
93- ( ) => {
94- expect ( screen . queryByText ( 'success' ) ) . not . toBeNull ( ) ;
95- expect ( screen . queryByText ( 'Hello' ) ) . toBeNull ( ) ;
96- expect ( screen . queryByText ( 'World' ) ) . not . toBeNull ( ) ;
97- expect ( screen . queryByText ( 'mutating' ) ) . toBeNull ( ) ;
98- } ,
99- { timeout : 3000 }
100- ) ;
117+ resolveDelete ?.( ) ;
118+ await waitFor ( ( ) => {
119+ expect ( screen . queryByText ( 'success' ) ) . not . toBeNull ( ) ;
120+ expect ( screen . queryByText ( 'Hello' ) ) . toBeNull ( ) ;
121+ expect ( screen . queryByText ( 'World' ) ) . not . toBeNull ( ) ;
122+ expect ( screen . queryByText ( 'mutating' ) ) . toBeNull ( ) ;
123+ } ) ;
101124 } ) ;
102125
103126 it ( 'uses the latest declaration time params' , async ( ) => {
104127 const posts = [
105128 { id : 1 , title : 'Hello' } ,
106129 { id : 2 , title : 'World' } ,
107130 ] ;
131+ let resolveDelete : ( ( ) => void ) | undefined ;
108132 const dataProvider = {
109- getList : ( ) => {
110- return Promise . resolve ( {
133+ getList : ( ) =>
134+ Promise . resolve ( {
111135 data : posts ,
112136 total : posts . length ,
113- } ) ;
114- } ,
137+ } ) ,
115138 delete : jest . fn ( ( _ , params ) => {
116139 return new Promise ( resolve => {
117- setTimeout ( ( ) => {
118- const index = posts . findIndex ( p => p . id === params . id ) ;
119- posts . splice ( index , 1 ) ;
140+ resolveDelete = ( ) => {
141+ const index = posts . findIndex (
142+ post => post . id === params . id
143+ ) ;
144+ if ( index !== - 1 ) {
145+ posts . splice ( index , 1 ) ;
146+ }
120147 resolve ( { data : params . previousData } ) ;
121- } , 1000 ) ;
148+ } ;
122149 } ) ;
123150 } ) ,
124151 } as any ;
@@ -134,15 +161,13 @@ describe('useDelete', () => {
134161 expect ( screen . queryByText ( 'World' ) ) . not . toBeNull ( ) ;
135162 expect ( screen . queryByText ( 'mutating' ) ) . not . toBeNull ( ) ;
136163 } ) ;
137- await waitFor (
138- ( ) => {
139- expect ( screen . queryByText ( 'success' ) ) . not . toBeNull ( ) ;
140- expect ( screen . queryByText ( 'Hello' ) ) . toBeNull ( ) ;
141- expect ( screen . queryByText ( 'World' ) ) . not . toBeNull ( ) ;
142- expect ( screen . queryByText ( 'mutating' ) ) . toBeNull ( ) ;
143- } ,
144- { timeout : 3000 }
145- ) ;
164+ resolveDelete ?.( ) ;
165+ await waitFor ( ( ) => {
166+ expect ( screen . queryByText ( 'success' ) ) . not . toBeNull ( ) ;
167+ expect ( screen . queryByText ( 'Hello' ) ) . toBeNull ( ) ;
168+ expect ( screen . queryByText ( 'World' ) ) . not . toBeNull ( ) ;
169+ expect ( screen . queryByText ( 'mutating' ) ) . toBeNull ( ) ;
170+ } ) ;
146171
147172 expect ( dataProvider . delete ) . toHaveBeenCalledWith ( 'posts' , {
148173 id : 1 ,
0 commit comments