Skip to content

Commit b42d0f5

Browse files
committed
test(populate): repro #8173 #6488
1 parent 1db5982 commit b42d0f5

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

test/model.populate.test.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8627,4 +8627,50 @@ describe('model: populate:', function() {
86278627
assert.equal(team.developers[2].ticketCount, 0);
86288628
});
86298629
});
8630+
8631+
it('handles virtual populate underneath embedded discriminator nested path (gh-6488) (gh-8173)', function() {
8632+
return co(function*() {
8633+
const UserModel = db.model('gh6488_User', Schema({
8634+
employeeId: Number,
8635+
name: String
8636+
}));
8637+
8638+
const eventSchema = Schema({ message: String }, { discriminatorKey: 'kind' });
8639+
const batchSchema = Schema({ nested: { events: [eventSchema] } });
8640+
8641+
const nestedLayerSchema = Schema({ users: [ Number ] });
8642+
nestedLayerSchema.virtual('users_$', {
8643+
ref: 'gh6488_User',
8644+
localField: 'users',
8645+
foreignField: 'employeeId'
8646+
});
8647+
8648+
const docArray = batchSchema.path('nested.events');
8649+
const Clicked = docArray.
8650+
discriminator('gh6488_Clicked', Schema({ nestedLayer: nestedLayerSchema }));
8651+
const Purchased = docArray.
8652+
discriminator('gh6488_Purchased', Schema({ purchased: String }));
8653+
8654+
const Batch = db.model('gh6488', batchSchema);
8655+
8656+
yield UserModel.create({ employeeId: 1, name: 'test' });
8657+
yield Batch.create({
8658+
nested: {
8659+
events: [
8660+
{ kind: 'gh6488_Clicked', nestedLayer: { users: [1] } },
8661+
{ kind: 'gh6488_Purchased', purchased: 'test' }
8662+
]
8663+
}
8664+
});
8665+
8666+
let res = yield Batch.findOne().
8667+
populate('nested.events.nestedLayer.users_$');
8668+
assert.equal(res.nested.events[0].nestedLayer.users_$.length, 1);
8669+
assert.equal(res.nested.events[0].nestedLayer.users_$[0].name, 'test');
8670+
8671+
res = res.toObject({ virtuals: true });
8672+
assert.equal(res.nested.events[0].nestedLayer.users_$.length, 1);
8673+
assert.equal(res.nested.events[0].nestedLayer.users_$[0].name, 'test');
8674+
});
8675+
});
86308676
});

0 commit comments

Comments
 (0)