11import type { Server } from "node:http"
22import { beforeAll , describe , expect , it } from "@jest/globals"
3+ import type { AxiosError } from "axios"
34import { ApiClient } from "./generated/client/axios/client"
45import { E2ETestClientServers } from "./generated/client/fetch/client"
56import { startServerFunctions } from "./index"
@@ -57,6 +58,25 @@ describe.each(startServerFunctions)(
5758 } )
5859 } )
5960
61+ describe ( "404 handling" , ( ) => {
62+ it ( "should handle 404s" , async ( ) => {
63+ const err = await client
64+ . getResponsesEmpty ( undefined , { url : "/not-found" } )
65+ . then (
66+ ( ) => {
67+ throw new Error ( "expected request to fail" )
68+ } ,
69+ ( err : unknown ) => err ,
70+ )
71+
72+ expect ( err ) . toMatchObject ( {
73+ message : "Request failed with status code 404" ,
74+ name : "AxiosError" ,
75+ status : 404 ,
76+ } )
77+ } )
78+ } )
79+
6080 describe ( "GET /headers/undeclared" , ( ) => {
6181 it ( "provides the default headers" , async ( ) => {
6282 const { data} = await client . getHeadersUndeclared ( )
@@ -174,22 +194,15 @@ describe.each(startServerFunctions)(
174194 ( ) => {
175195 throw new Error ( "expected request to fail" )
176196 } ,
177- ( err ) => err ,
197+ ( err : AxiosError ) => err ,
178198 )
179199
180- expect ( err ) . toMatchObject ( {
181- message : "Request failed with status code 400" ,
182- name : "AxiosError" ,
183- status : 400 ,
184- response : expect . objectContaining ( {
185- data : {
186- message : "Request validation failed parsing request header" ,
187- phase : "request_validation" ,
188- cause : {
189- message : expect . stringMatching ( "Expected number, received nan" ) ,
190- } ,
191- } ,
192- } ) ,
200+ expect ( err . message ) . toMatch ( "Request failed with status code 400" )
201+ expect ( err . status ) . toBe ( 400 )
202+ expect ( err . response ?. data ) . toMatchObject ( {
203+ message : "Request validation failed parsing request header" ,
204+ phase : "request_validation" ,
205+ cause : expect . stringContaining ( "Expected number, received nan" ) ,
193206 } )
194207 } )
195208 } )
@@ -208,6 +221,30 @@ describe.each(startServerFunctions)(
208221 } )
209222 } )
210223
224+ it ( "returns 400 when parameters fail validation" , async ( ) => {
225+ const err = await client
226+ . getValidationNumbersRandomNumber ( {
227+ // @ts -expect-error: testing runtime validation
228+ min : "one" ,
229+ // @ts -expect-error: testing runtime validation
230+ max : "ten" ,
231+ } )
232+ . then (
233+ ( ) => {
234+ throw new Error ( "expected request to fail" )
235+ } ,
236+ ( err : AxiosError ) => err ,
237+ )
238+
239+ expect ( err . message ) . toMatch ( "Request failed with status code 400" )
240+ expect ( err . status ) . toBe ( 400 )
241+ expect ( err . response ?. data ) . toMatchObject ( {
242+ message : "Request validation failed parsing querystring" ,
243+ phase : "request_validation" ,
244+ cause : expect . stringContaining ( "Expected number, received nan" ) ,
245+ } )
246+ } )
247+
211248 it ( "handles a query param array of 1 element" , async ( ) => {
212249 const { data} = await client . getValidationNumbersRandomNumber ( {
213250 forbidden : [ 1 ] ,
@@ -252,5 +289,24 @@ describe.each(startServerFunctions)(
252289 expect ( data ) . toEqual ( "" )
253290 } )
254291 } )
292+
293+ describe ( "GET /responses/500" , ( ) => {
294+ it ( "returns response from error middleware" , async ( ) => {
295+ const err = await client . getResponses500 ( ) . then (
296+ ( ) => {
297+ throw new Error ( "expected request to fail" )
298+ } ,
299+ ( err : AxiosError ) => err ,
300+ )
301+
302+ expect ( err . message ) . toMatch ( "Request failed with status code 500" )
303+ expect ( err . status ) . toBe ( 500 )
304+ expect ( err . response ?. data ) . toMatchObject ( {
305+ message : "Request handler threw unhandled exception" ,
306+ phase : "request_handler" ,
307+ cause : expect . stringContaining ( "something went wrong" ) ,
308+ } )
309+ } )
310+ } )
255311 } ,
256312)
0 commit comments