File tree 2 files changed +46
-1
lines changed
2 files changed +46
-1
lines changed Original file line number Diff line number Diff line change @@ -25,5 +25,43 @@ describe('Resolver helper `alises` ->', () => {
25
25
const aliases = prepareAliases ( User ) ;
26
26
expect ( aliases ) . toEqual ( false ) ;
27
27
} ) ;
28
+
29
+ it ( 'should extract field aliases from discriminator Models' , ( ) => {
30
+ const UserSchema = new mongoose . Schema ( {
31
+ e : {
32
+ type : String ,
33
+ alias : 'emailAddress' ,
34
+ } ,
35
+ } ) ;
36
+ const User = mongoose . model ( 'User111' , UserSchema ) ;
37
+ const VIPUserSchema = new mongoose . Schema ( {
38
+ f : {
39
+ type : Number ,
40
+ alias : 'freeDrinks' ,
41
+ } ,
42
+ } ) ;
43
+ User . discriminator ( 'VIPUser111' , VIPUserSchema ) ;
44
+ const aliases = prepareAliases ( User ) ;
45
+ expect ( aliases ) . toEqual ( { emailAddress : 'e' , freeDrinks : 'f' } ) ;
46
+ } ) ;
47
+
48
+ it ( 'should extract field aliases in discriminator Models inherited from base Model' , ( ) => {
49
+ const UserSchema = new mongoose . Schema ( {
50
+ e : {
51
+ type : String ,
52
+ alias : 'emailAddress' ,
53
+ } ,
54
+ } ) ;
55
+ const User = mongoose . model ( 'User789' , UserSchema ) ;
56
+ const VIPUserSchema = new mongoose . Schema ( {
57
+ f : {
58
+ type : Number ,
59
+ alias : 'freeDrinks' ,
60
+ } ,
61
+ } ) ;
62
+ const VIPUser = User . discriminator ( 'VIPUser789' , VIPUserSchema ) ;
63
+ const aliases = prepareAliases ( VIPUser ) ;
64
+ expect ( aliases ) . toEqual ( { emailAddress : 'e' , freeDrinks : 'f' } ) ;
65
+ } ) ;
28
66
} ) ;
29
67
} ) ;
Original file line number Diff line number Diff line change @@ -5,7 +5,14 @@ export type AliasesMap = {
5
5
} ;
6
6
7
7
export function prepareAliases ( model : Model < any > ) : AliasesMap | false {
8
- const aliases = ( model ?. schema as any ) ?. aliases ;
8
+ const aliases = ( model ?. schema as any ) ?. aliases || { } ;
9
+
10
+ if ( model . discriminators ) {
11
+ Object . keys ( model . discriminators ) . forEach ( ( subModelName : string ) => {
12
+ const submodel : Model < any > = ( model . discriminators as any ) [ subModelName ] ;
13
+ Object . assign ( aliases , ( submodel ?. schema as any ) ?. aliases ) ;
14
+ } ) ;
15
+ }
9
16
if ( Object . keys ( aliases ) . length > 0 ) {
10
17
return aliases ;
11
18
}
You can’t perform that action at this time.
0 commit comments