diff --git a/src/resolvers/helpers/__tests__/aliases-test.ts b/src/resolvers/helpers/__tests__/aliases-test.ts index c66d0fa0..9dae00f4 100644 --- a/src/resolvers/helpers/__tests__/aliases-test.ts +++ b/src/resolvers/helpers/__tests__/aliases-test.ts @@ -25,5 +25,43 @@ describe('Resolver helper `alises` ->', () => { const aliases = prepareAliases(User); expect(aliases).toEqual(false); }); + + it('should extract field aliases from discriminator Models', () => { + const UserSchema = new mongoose.Schema({ + e: { + type: String, + alias: 'emailAddress', + }, + }); + const User = mongoose.model('User111', UserSchema); + const VIPUserSchema = new mongoose.Schema({ + f: { + type: Number, + alias: 'freeDrinks', + }, + }); + User.discriminator('VIPUser111', VIPUserSchema); + const aliases = prepareAliases(User); + expect(aliases).toEqual({ emailAddress: 'e', freeDrinks: 'f' }); + }); + + it('should extract field aliases in discriminator Models inherited from base Model', () => { + const UserSchema = new mongoose.Schema({ + e: { + type: String, + alias: 'emailAddress', + }, + }); + const User = mongoose.model('User789', UserSchema); + const VIPUserSchema = new mongoose.Schema({ + f: { + type: Number, + alias: 'freeDrinks', + }, + }); + const VIPUser = User.discriminator('VIPUser789', VIPUserSchema); + const aliases = prepareAliases(VIPUser); + expect(aliases).toEqual({ emailAddress: 'e', freeDrinks: 'f' }); + }); }); }); diff --git a/src/resolvers/helpers/aliases.ts b/src/resolvers/helpers/aliases.ts index aaec6c1e..4a005a63 100644 --- a/src/resolvers/helpers/aliases.ts +++ b/src/resolvers/helpers/aliases.ts @@ -5,7 +5,14 @@ export type AliasesMap = { }; export function prepareAliases(model: Model): AliasesMap | false { - const aliases = (model?.schema as any)?.aliases; + const aliases = (model?.schema as any)?.aliases || {}; + + if (model.discriminators) { + Object.keys(model.discriminators).forEach((subModelName: string) => { + const submodel: Model = (model.discriminators as any)[subModelName]; + Object.assign(aliases, (submodel?.schema as any)?.aliases); + }); + } if (Object.keys(aliases).length > 0) { return aliases; }