1
1
import "reflect-metadata" ;
2
+ import { Exclude , Expose } from "class-transformer" ;
3
+ import { defaultMetadataStorage } from "class-transformer/storage" ;
2
4
import { JsonController } from "../../src/decorator/JsonController" ;
3
5
import { Post } from "../../src/decorator/Post" ;
4
6
import { Body } from "../../src/decorator/Body" ;
5
7
import { createExpressServer , createKoaServer , getMetadataArgsStorage } from "../../src/index" ;
6
8
import { assertRequest } from "./test-utils" ;
7
9
const expect = require ( "chakram" ) . expect ;
8
10
9
- export class User {
10
- firstName : string ;
11
- lastName : string ;
12
-
13
- toJSON ( ) {
14
- return { firstName : this . firstName } ; // lastName is excluded when class-transformer is disabled
15
- }
16
- }
17
-
18
11
describe ( "controller options" , ( ) => {
19
12
20
- let initializedUser : User ;
21
- function handler ( user : User ) {
22
- initializedUser = user ;
23
- const ret = new User ( ) ;
24
- ret . firstName = user . firstName ;
25
- ret . lastName = user . lastName || "default" ;
26
- return ret ;
27
- }
13
+ let initializedUser : any ;
14
+ let User : any ;
15
+
16
+ after ( ( ) => {
17
+ defaultMetadataStorage . clear ( ) ;
18
+ } ) ;
28
19
29
20
beforeEach ( ( ) => {
30
21
initializedUser = undefined ;
@@ -35,22 +26,39 @@ describe("controller options", () => {
35
26
// reset metadata args storage
36
27
getMetadataArgsStorage ( ) . reset ( ) ;
37
28
29
+ @Exclude ( )
30
+ class UserModel {
31
+ @Expose ( )
32
+ firstName : string ;
33
+
34
+ lastName : string ;
35
+ }
36
+ User = UserModel ;
37
+
38
+ function handler ( user : UserModel ) {
39
+ initializedUser = user ;
40
+ const ret = new User ( ) ;
41
+ ret . firstName = user . firstName ;
42
+ ret . lastName = user . lastName || "default" ;
43
+ return ret ;
44
+ }
45
+
38
46
@JsonController ( "/default" )
39
47
class DefaultController {
40
48
@Post ( "/" )
41
- postUsers ( @Body ( ) user : User ) { return handler ( user ) ; }
49
+ postUsers ( @Body ( ) user : UserModel ) { return handler ( user ) ; }
42
50
}
43
51
44
52
@JsonController ( "/transform" , { transformRequest : true , transformResponse : true } )
45
- class NoResponseTransformController {
53
+ class TransformController {
46
54
@Post ( "/" )
47
- postUsers ( @Body ( ) user : User ) { return handler ( user ) ; }
55
+ postUsers ( @Body ( ) user : UserModel ) { return handler ( user ) ; }
48
56
}
49
57
50
58
@JsonController ( "/noTransform" , { transformRequest : false , transformResponse : false } )
51
- class NoRequestTransformController {
59
+ class NoTransformController {
52
60
@Post ( "/" )
53
- postUsers ( @Body ( ) user : User ) { return handler ( user ) ; }
61
+ postUsers ( @Body ( ) user : UserModel ) { return handler ( user ) ; }
54
62
}
55
63
56
64
} ) ;
@@ -64,24 +72,27 @@ describe("controller options", () => {
64
72
describe ( "controller transform is enabled by default" , ( ) => {
65
73
assertRequest ( [ 3001 , 3002 ] , "post" , "default" , { firstName : "Umed" , lastName : "Khudoiberdiev" } , response => {
66
74
expect ( initializedUser ) . to . be . instanceOf ( User ) ;
75
+ expect ( initializedUser . lastName ) . to . be . undefined ;
67
76
expect ( response ) . to . have . status ( 200 ) ;
68
- expect ( response . body . lastName ) . to . be . defined ;
77
+ expect ( response . body . lastName ) . to . be . undefined ;
69
78
} ) ;
70
79
} ) ;
71
80
72
81
describe ( "when controller transform is enabled" , ( ) => {
73
82
assertRequest ( [ 3001 , 3002 ] , "post" , "transform" , { firstName : "Umed" , lastName : "Khudoiberdiev" } , response => {
74
83
expect ( initializedUser ) . to . be . instanceOf ( User ) ;
84
+ expect ( initializedUser . lastName ) . to . be . undefined ;
75
85
expect ( response ) . to . have . status ( 200 ) ;
76
- expect ( response . body . lastName ) . not . to . be . undefined ;
86
+ expect ( response . body . lastName ) . to . be . undefined ;
77
87
} ) ;
78
88
} ) ;
79
89
80
90
describe ( "when controller transform is disabled" , ( ) => {
81
91
assertRequest ( [ 3001 , 3002 ] , "post" , "noTransform" , { firstName : "Umed" , lastName : "Khudoiberdiev" } , response => {
82
92
expect ( initializedUser ) . not . to . be . instanceOf ( User ) ;
93
+ expect ( initializedUser . lastName ) . to . exist ;
83
94
expect ( response ) . to . have . status ( 200 ) ;
84
- expect ( response . body . lastName ) . to . be . defined ;
95
+ expect ( response . body . lastName ) . to . exist ;
85
96
} ) ;
86
97
} ) ;
87
98
0 commit comments