deno.land / x / mongoose@6.7.5 / test / types.embeddeddocumentdeclarative.test.js
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135'use strict';
/** * Module dependencies. */
const assert = require('assert');const start = require('./common');
const mongoose = start.mongoose;const Schema = mongoose.Schema;
/** * Test. */
describe('types.embeddeddocumentdeclarative', function() { describe('with a parent with a field with type set to a POJO', function() { const ParentSchemaDef = { name: String, child: { type: { name: String } } };
describe('creates subdocument schema if `type` is an object with keys', function() { const ParentSchema = new mongoose.Schema(ParentSchemaDef); it('interprets the POJO as a subschema (gh-7494)', function(done) { assert.equal(ParentSchema.paths.child.instance, 'Embedded'); assert.strictEqual(ParentSchema.paths.child['$isSingleNested'], true); done(); }); it('enforces provided schema on the child path, unlike Mixed (gh-7494)', function(done) { const ParentModel = mongoose.model('ParentModel-7494-EmbeddedDeclarativeSubschema', ParentSchema); const kingDaphnes = new ParentModel({ name: 'King Daphnes Nohansen Hyrule', child: { name: 'Princess Zelda', mixedUp: 'not' } }); const princessZelda = kingDaphnes.child.toObject();
assert.equal(princessZelda.name, 'Princess Zelda'); assert.strictEqual(princessZelda.mixedUp, undefined); done(); });
it('underneath array (gh-8627)', function() { const schema = new Schema({ arr: [{ nested: { type: { test: String } } }] });
assert.ok(schema.path('arr').schema.path('nested').instance !== 'Mixed'); assert.ok(schema.path('arr').schema.path('nested.test') instanceof mongoose.Schema.Types.String); });
it('nested array (gh-8627)', function() { const schema = new Schema({ l1: { type: { l2: { type: { test: String } } } } });
assert.ok(schema.path('l1').instance !== 'Mixed'); assert.ok(schema.path('l1.l2').instance !== 'Mixed'); }); }); }); describe('with a parent with a POJO field with a field "type" with a type set to "String"', function() { const ParentSchemaDef = { name: String, child: { name: String, type: { type: String } } }; const ParentSchemaNotMixed = new Schema(ParentSchemaDef); const ParentSchemaNotSubdoc = new Schema(ParentSchemaDef); it('does not create a path for child in either option', function(done) { assert.equal(ParentSchemaNotMixed.paths['child.name'].instance, 'String'); assert.equal(ParentSchemaNotSubdoc.paths['child.name'].instance, 'String'); done(); }); it('treats type as a property name not a type in both options', function(done) { assert.equal(ParentSchemaNotMixed.paths['child.type'].instance, 'String'); assert.equal(ParentSchemaNotSubdoc.paths['child.type'].instance, 'String'); done(); }); it('enforces provided schema on the child tree in both options, unlike Mixed (gh-7494)', function(done) { const ParentModelNotMixed = mongoose.model('ParentModel-7494-EmbeddedDeclarativeNestedNotMixed', ParentSchemaNotMixed); const ParentModelNotSubdoc = mongoose.model('ParentModel-7494-EmbeddedDeclarativeNestedNotSubdoc', ParentSchemaNotSubdoc);
const grandmother = new ParentModelNotMixed({ name: 'Grandmother', child: { name: 'Rito Chieftan', type: 'Mother', confidence: 10 } }); const ritoChieftan = new ParentModelNotSubdoc({ name: 'Rito Chieftan', child: { name: 'Prince Komali', type: 'Medli', confidence: 1 } });
assert.equal(grandmother.child.name, 'Rito Chieftan'); assert.equal(grandmother.child.type, 'Mother'); assert.strictEqual(grandmother.child.confidence, undefined); assert.equal(ritoChieftan.child.name, 'Prince Komali'); assert.equal(ritoChieftan.child.type, 'Medli'); assert.strictEqual(ritoChieftan.child.confidence, undefined); done(); }); });});
Version Info