@@ -177,12 +177,16 @@ describe('hydrate vars', () => {
177177
178178 fetcher . setResponse ( b , Promise . reject ( 'oopsy whoopsies' ) )
179179
180- const actual = await hydrateVars ( vars , vars , {
180+ const response = hydrateVars ( vars , vars , {
181181 url : '' ,
182182 orgID : '' ,
183183 selections : { } ,
184184 fetcher,
185- } ) . promise
185+ } )
186+
187+ const mockFire = jest . spyOn ( response . on , 'fire' )
188+
189+ const actual = await response . promise
186190
187191 // We expect the following end state:
188192 //
@@ -204,6 +208,12 @@ describe('hydrate vars', () => {
204208 actual . filter ( v => v . id === 'c' ) [ 0 ] . arguments . values . results
205209 ) . toEqual ( [ 'cVal' ] )
206210 expect ( actual . filter ( v => v . id === 'c' ) [ 0 ] . selected ) . toEqual ( [ 'cVal' ] )
211+
212+ const errorCall = mockFire . mock . calls [ 4 ]
213+ const [ eventName , variable , errorMessage ] = errorCall
214+ expect ( eventName ) . toBe ( 'error' )
215+ expect ( variable ) . toEqual ( b )
216+ expect ( errorMessage ) . toBe ( 'oopsy whoopsies' )
207217 } )
208218
209219 test ( 'works with map template variables' , async ( ) => {
@@ -356,4 +366,33 @@ describe('hydrate vars', () => {
356366 } ) . promise
357367 expect ( actual . length ) . toEqual ( 2 )
358368 } )
369+
370+ it ( 'fires an error event when an error is caught' , async ( ) => {
371+ const error = 'four_oh_four not found'
372+ const fetcher = new FakeFetcher ( )
373+ const queryVariable = createVariable (
374+ 'errorVariable' ,
375+ 'f(x: v.four_oh_four)' ,
376+ null ,
377+ RemoteDataState . Error
378+ )
379+
380+ fetcher . setResponse ( queryVariable , Promise . reject ( error ) )
381+
382+ const actual = hydrateVars ( [ queryVariable ] , [ queryVariable ] , {
383+ url : '' ,
384+ orgID : '' ,
385+ selections : { } ,
386+ fetcher,
387+ } )
388+ const mockFire = jest . spyOn ( actual . on , 'fire' )
389+
390+ await actual . promise
391+
392+ const [ _ , errorCall ] = mockFire . mock . calls
393+ const [ eventName , variable , errorMessage ] = errorCall
394+ expect ( eventName ) . toBe ( 'error' )
395+ expect ( variable ) . toEqual ( queryVariable )
396+ expect ( errorMessage ) . toBe ( error )
397+ } )
359398} )
0 commit comments