Skip to content

Commit 93eb3aa

Browse files
committed
added test for recursive embedded discriminators
1 parent 2ed278a commit 93eb3aa

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

test/docs/discriminators.test.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,4 +352,55 @@ describe('discriminator docs', function () {
352352
}).
353353
catch(done);
354354
});
355+
356+
/**
357+
* Recursive embedded discriminators
358+
*/
359+
it('Recursive embedded discriminators in arrays', function(done) {
360+
var eventSchema = new Schema({ message: String },
361+
{ discriminatorKey: 'kind', _id: false });
362+
363+
var batchSchema = new Schema({ events: [eventSchema] });
364+
365+
var subEventSchema = new Schema({
366+
sub_events: [eventSchema]
367+
}, { _id: false });
368+
369+
var SubEvent = subEventSchema.path('sub_events').discriminator('SubEvent', subEventSchema)
370+
batchSchema.path('events').discriminator('SubEvent', subEventSchema);
371+
372+
373+
// Create a new batch of events with different kinds
374+
var batch = {
375+
events: [
376+
{ kind: 'SubEvent', sub_events: [{kind:'SubEvent', sub_events:[], message:'test1'}], message: 'hello' },
377+
{ kind: 'SubEvent', sub_events: [{kind:'SubEvent', sub_events:[{kind:'SubEvent', sub_events:[], message:'test3'}], message:'test2'}], message: 'world' }
378+
]
379+
};
380+
381+
Batch.create(batch).
382+
then(function(doc) {
383+
assert.equal(doc.events.length, 2);
384+
385+
assert.equal(doc.events[0].sub_events[0].message, 'test1');
386+
assert.equal(doc.events[0].message, 'hello');
387+
assert.ok(doc.events[0] instanceof SubEvent);
388+
389+
assert.equal(doc.events[1].sub_events[0].sub_events[0].message, 'test3');
390+
assert.equal(doc.events[1].message, 'world');
391+
assert.ok(doc.events[1] instanceof SubEvent);
392+
393+
doc.events.push({kind:'SubEvent', sub_events:[{kind:'SubEvent', sub_events:[], message:'test4'}], message:'pushed'});
394+
return doc.save();
395+
}).
396+
then(function(doc) {
397+
assert.equal(doc.events.length, 3);
398+
399+
assert.equal(doc.events[2].message, 'pushed');
400+
assert.ok(doc.events[2].sub_events[0] instanceof SubEvent);
401+
402+
done();
403+
}).
404+
catch(done);
405+
});
355406
});

0 commit comments

Comments
 (0)