@@ -9,7 +9,11 @@ import superagent from 'superagent';
99import supertest from 'supertest' ;
1010import { URL } from 'url' ;
1111
12- import { superagentRequestFactory , supertestRequestFactory } from '../src/request' ;
12+ import {
13+ DecodeError ,
14+ superagentRequestFactory ,
15+ supertestRequestFactory ,
16+ } from '../src/request' ;
1317import { buildApiClient } from '../src/routes' ;
1418
1519const PostTestRoute = h . httpRoute ( {
@@ -33,6 +37,9 @@ const PostTestRoute = h.httpRoute({
3337 bar : t . number ,
3438 baz : t . boolean ,
3539 } ) ,
40+ 401 : t . type ( {
41+ message : t . string ,
42+ } ) ,
3643 } ,
3744} ) ;
3845
@@ -75,11 +82,16 @@ testApp.post('/test/:id', (req, res) => {
7582 res . send ( {
7683 invalid : 'response' ,
7784 } ) ;
78- } else if ( req . headers [ 'x-send-unexpected -status-code' ] ) {
85+ } else if ( req . headers [ 'x-send-unknown -status-code' ] ) {
7986 res . status ( 400 ) ;
8087 res . send ( {
8188 error : 'bad request' ,
8289 } ) ;
90+ } else if ( req . headers [ 'x-send-unexpected-status-code' ] ) {
91+ res . status ( 401 ) ;
92+ res . send ( {
93+ message : 'unauthorized' ,
94+ } ) ;
8395 } else {
8496 const response = PostTestRoute . response [ 200 ] . encode ( {
8597 ...params ,
@@ -129,10 +141,10 @@ describe('request', () => {
129141 } ) ;
130142 } ) ;
131143
132- it ( 'gracefully handles unexpected status codes' , async ( ) => {
144+ it ( 'gracefully handles unknown status codes' , async ( ) => {
133145 const response = await apiClient [ 'api.v1.test' ]
134146 . post ( { id : 1337 , foo : 'test' , bar : 42 } )
135- . set ( 'x-send-unexpected -status-code' , 'true' )
147+ . set ( 'x-send-unknown -status-code' , 'true' )
136148 . decode ( ) ;
137149
138150 assert . equal ( response . status , 'decodeError' ) ;
@@ -169,21 +181,32 @@ describe('request', () => {
169181 . post ( { id : 1337 , foo : 'test' , bar : 42 } )
170182 . set ( 'x-send-unexpected-status-code' , 'true' )
171183 . decodeExpecting ( 200 )
172- . then ( ( ) => false )
173- . catch ( ( ) => true ) ;
184+ . then ( ( ) => '' )
185+ . catch ( ( err ) => ( err instanceof DecodeError ? err . message : '' ) ) ;
186+
187+ assert . deepEqual ( result , 'Unexpected response 401: {"message":"unauthorized"}' ) ;
188+ } ) ;
189+
190+ it ( 'throws for unknown responses' , async ( ) => {
191+ const result = await apiClient [ 'api.v1.test' ]
192+ . post ( { id : 1337 , foo : 'test' , bar : 42 } )
193+ . set ( 'x-send-unknown-status-code' , 'true' )
194+ . decodeExpecting ( 200 )
195+ . then ( ( ) => '' )
196+ . catch ( ( err ) => ( err instanceof DecodeError ? err . message : '' ) ) ;
174197
175- assert . isTrue ( result ) ;
198+ assert . deepEqual ( result , 'Unexpected response 400: {"error":"bad request"}' ) ;
176199 } ) ;
177200
178201 it ( 'throws for decode errors' , async ( ) => {
179202 const result = await apiClient [ 'api.v1.test' ]
180203 . post ( { id : 1337 , foo : 'test' , bar : 42 } )
181204 . set ( 'x-send-invalid-response-body' , 'true' )
182205 . decodeExpecting ( 200 )
183- . then ( ( ) => false )
184- . catch ( ( ) => true ) ;
206+ . then ( ( ) => '' )
207+ . catch ( ( err ) => ( err instanceof DecodeError ? err . message : '' ) ) ;
185208
186- assert . isTrue ( result ) ;
209+ assert . deepEqual ( result , 'Could not decode response 200: {"invalid":"response"}' ) ;
187210 } ) ;
188211 } ) ;
189212
@@ -210,8 +233,7 @@ describe('request', () => {
210233 . set ( 'x-send-unexpected-status-code' , 'true' )
211234 . decode ( ) ;
212235
213- assert . equal ( req . status , 'decodeError' ) ;
214- assert . equal ( req . original . status , 400 ) ;
236+ assert . equal ( req . status , 401 ) ;
215237 } ) ;
216238 } ) ;
217239} ) ;
0 commit comments