@@ -8,6 +8,10 @@ import {Get} from "../../src/decorator/Get";
8
8
import { QueryParam } from "../../src/decorator/QueryParam" ;
9
9
import { ResponseClassTransformOptions } from "../../src/decorator/ResponseClassTransformOptions" ;
10
10
import { RoutingControllersOptions } from "../../src/RoutingControllersOptions" ;
11
+ import { ExpressErrorMiddlewareInterface } from "../../src/driver/express/ExpressErrorMiddlewareInterface" ;
12
+ import { Middleware } from "../../src/decorator/Middleware" ;
13
+ import { KoaMiddlewareInterface } from "../../src/driver/koa/KoaMiddlewareInterface" ;
14
+
11
15
const chakram = require ( "chakram" ) ;
12
16
const expect = chakram . expect ;
13
17
@@ -208,4 +212,80 @@ describe("parameters auto-validation", () => {
208
212
} ) ;
209
213
} ) ;
210
214
211
- } ) ;
215
+ describe ( "should contain param name on validation failed" , ( ) => {
216
+
217
+ let requestFilter : any ;
218
+ beforeEach ( ( ) => {
219
+ requestFilter = undefined ;
220
+ } ) ;
221
+
222
+ before ( ( ) => {
223
+ getMetadataArgsStorage ( ) . reset ( ) ;
224
+
225
+ @JsonController ( )
226
+ class UserController {
227
+
228
+ @Get ( "/user" )
229
+ getUsers ( @QueryParam ( "filter" ) filter : UserFilter ) : any {
230
+ requestFilter = filter ;
231
+ const user = new UserModel ( ) ;
232
+ user . id = 1 ;
233
+ user . _firstName = "Umed" ;
234
+ user . _lastName = "Khudoiberdiev" ;
235
+ return user ;
236
+ }
237
+ }
238
+ } ) ;
239
+
240
+ const options : RoutingControllersOptions = {
241
+ validation : true ,
242
+ defaultErrorHandler : false
243
+ } ;
244
+
245
+ let expressApp : any , koaApp : any ;
246
+ before ( done => {
247
+
248
+ @Middleware ( { type : "after" } )
249
+ class ExpressErrorHandler implements ExpressErrorMiddlewareInterface {
250
+
251
+ error ( error : any , request : any , response : any , next : ( err ?: any ) => any ) : void {
252
+ response . statusCode = 400 ;
253
+ response . send ( error . paramName ) ;
254
+ next ( ) ;
255
+ }
256
+ }
257
+
258
+ expressApp = createExpressServer ( options )
259
+ . listen ( 3001 , done ) ;
260
+ } ) ;
261
+ after ( done => expressApp . close ( done ) ) ;
262
+ before ( done => {
263
+
264
+ @Middleware ( { type : "before" } )
265
+ class KoaErrorHandler implements KoaMiddlewareInterface {
266
+
267
+ async use ( context : any , next : ( err ?: any ) => Promise < any > ) : Promise < any > {
268
+ try {
269
+ await next ( ) ;
270
+ } catch ( e ) {
271
+ context . body = e . paramName ;
272
+ context . status = 400 ;
273
+ }
274
+ }
275
+ }
276
+
277
+ koaApp = createKoaServer ( options ) . listen ( 3002 , done ) ;
278
+ } ) ;
279
+ after ( done => koaApp . close ( done ) ) ;
280
+
281
+ const invalidFilter = {
282
+ keyword : "aa"
283
+ } ;
284
+
285
+ assertRequest ( [ 3001 , 3002 ] , "get" , `user?filter=${ JSON . stringify ( invalidFilter ) } ` , response => {
286
+ expect ( response ) . to . have . status ( 400 ) ;
287
+ expect ( response . body ) . to . equal ( "filter" ) ;
288
+ } ) ;
289
+ } ) ;
290
+
291
+ } ) ;
0 commit comments