@@ -16,7 +16,7 @@ afterEach(() => {
1616it ( 'can handle a successful precognition response via config handler' , async ( ) => {
1717 expect . assertions ( 2 )
1818
19- const response = { headers : { precognition : 'true' } , status : 204 , data : 'data' }
19+ const response = { headers : { precognition : 'true' , 'precognition-success' : 'true' } , status : 204 , data : 'data' }
2020 axios . request . mockResolvedValueOnce ( response )
2121
2222 await client . get ( 'https://laravel.com' , { } , {
@@ -31,7 +31,7 @@ it('can handle a successful precognition response via config handler', async ()
3131it ( 'can handle a success response via a fulfilled promise' , async ( ) => {
3232 expect . assertions ( 1 )
3333
34- const response = { headers : { precognition : 'true' } , status : 204 , data : 'data' }
34+ const response = { headers : { precognition : 'true' , 'precognition-success' : 'true' } , status : 204 , data : 'data' }
3535 axios . request . mockResolvedValueOnce ( response )
3636
3737 await client . post ( 'https://laravel.com' ) . then ( r => expect ( r ) . toBe ( response ) )
@@ -197,14 +197,34 @@ it('can provide input names to validate via config', async () => {
197197it ( 'throws an error if the precognition header is not present on a success response' , async ( ) => {
198198 expect . assertions ( 2 )
199199
200- axios . request . mockResolvedValueOnce ( { headers : { status : 204 } } )
200+ axios . request . mockResolvedValueOnce ( { headers : { } , status : 204 } )
201201
202202 await client . get ( 'https://laravel.com' ) . catch ( ( e ) => {
203203 expect ( e ) . toBeInstanceOf ( Error )
204204 expect ( e . message ) . toBe ( 'Did not receive a Precognition response. Ensure you have the Precognition middleware in place for the route.' )
205205 } )
206206} )
207207
208+ it ( 'does not consider 204 response to be success without "Precognition-Success" header' , async ( ) => {
209+ expect . assertions ( 2 )
210+
211+ axios . request . mockResolvedValueOnce ( { headers : { precognition : 'true' } , status : 204 } )
212+ let precognitionSucess = false
213+ let responseSuccess = false
214+
215+ await client . get ( 'https://laravel.com' , { } , {
216+ onPrecognitionSuccess ( ) {
217+ precognitionSucess = true
218+ } ,
219+ onSuccess ( ) {
220+ responseSuccess = true
221+ }
222+ } )
223+
224+ expect ( precognitionSucess ) . toBe ( false )
225+ expect ( responseSuccess ) . toBe ( true )
226+ } )
227+
208228it ( 'throws an error if the precognition header is not present on an error response' , async ( ) => {
209229 expect . assertions ( 2 )
210230
@@ -289,7 +309,7 @@ it('can customize how it determines a successful precognition response', async (
289309 } ,
290310 } ) . then ( value => expect ( value ) . toBe ( 'expected value' ) )
291311
292- response = { headers : { precognition : 'true' } , status : 204 , data : 'data' }
312+ response = { headers : { precognition : 'true' , 'precognition-success' : 'true' } , status : 204 , data : 'data' }
293313 axios . request . mockResolvedValueOnce ( response )
294314
295315 await client . get ( 'https://laravel.com' , { } , {
@@ -460,7 +480,7 @@ it('overrides request method url with config url', async () => {
460480 let config
461481 axios . request . mockImplementation ( ( c ) => {
462482 config = c
463- return Promise . resolve ( { headers : { precognition : 'true' } , status : 204 , data : 'data' } )
483+ return Promise . resolve ( { headers : { precognition : 'true' , 'precognition-success' : 'true' } , status : 204 , data : 'data' } )
464484 } )
465485
466486 await client . get ( 'https://laravel.com' , { } , {
@@ -495,7 +515,7 @@ it('overrides the request data with the config data', async () => {
495515 let config
496516 axios . request . mockImplementation ( ( c ) => {
497517 config = c
498- return Promise . resolve ( { headers : { precognition : 'true' } , status : 204 , data : 'data' } )
518+ return Promise . resolve ( { headers : { precognition : 'true' , 'precognition-success' : 'true' } , status : 204 , data : 'data' } )
499519 } )
500520
501521 await client . get ( 'https://laravel.com' , { expected : false } , {
@@ -530,7 +550,7 @@ it('merges request data with config data', async () => {
530550 let config
531551 axios . request . mockImplementation ( ( c ) => {
532552 config = c
533- return Promise . resolve ( { headers : { precognition : 'true' } , status : 204 , data : 'data' } )
553+ return Promise . resolve ( { headers : { precognition : 'true' , 'precognition-success' : 'true' } , status : 204 , data : 'data' } )
534554 } )
535555
536556 await client . get ( 'https://laravel.com' , { request : true } , {
@@ -567,7 +587,7 @@ it('merges request data with config params for get and delete requests', async (
567587 let config
568588 axios . request . mockImplementation ( ( c ) => {
569589 config = c
570- return Promise . resolve ( { headers : { precognition : 'true' } , status : 204 , data : 'data' } )
590+ return Promise . resolve ( { headers : { precognition : 'true' , 'precognition-success' : 'true' } , status : 204 , data : 'data' } )
571591 } )
572592
573593 await client . get ( 'https://laravel.com' , { data : true } , {
0 commit comments