From a32d9a823f9da8d8067c2a4ce8848cf6f0abd833 Mon Sep 17 00:00:00 2001 From: Valeri Karpov Date: Mon, 18 Nov 2019 16:41:12 -0800 Subject: [PATCH] test(populate): repro #8324 --- test/model.populate.test.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/test/model.populate.test.js b/test/model.populate.test.js index 8abdabb8a2c..adc08ac92a2 100644 --- a/test/model.populate.test.js +++ b/test/model.populate.test.js @@ -8801,5 +8801,33 @@ describe('model: populate:', function() { assert.equal(doc.troops[3].name, 'Card 4'); }); }); + + it('virtual populate with discriminator that has a custom discriminator value (gh-8324)', function() { + const mainSchema = new Schema({ title: { type: String } }, + { discriminatorKey: 'type' }); + + mainSchema.virtual('virtualField', { + ref: 'gh8324_Model', + localField: '_id', + foreignField: 'main', + }); + + const discriminatedSchema = new Schema({ description: String }); + const Main = db.model('gh8324_Main', mainSchema); + const Discriminator = Main.discriminator('gh8324_Discriminator', + discriminatedSchema, 'customValue'); + const Model = db.model('gh8324_Model', Schema({ + main: 'ObjectId' + })); + + return co(function*() { + const d = yield Discriminator.create({ title: 'test', description: 'test' }); + yield Model.create({ main: d._id }); + + const docs = yield Main.find().populate('virtualField').exec(); + console.log(docs.map(d => d.virtualField)) + assert.ok(docs[0].virtualField[0].main); + }); + }); }); });