deno.land / x / mongoose@6.7.5 / test / schema.alias.test.js
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193'use strict';
/** * Module dependencies. */
const start = require('./common');
const assert = require('assert');
const mongoose = start.mongoose;const Schema = mongoose.Schema;
describe('schema alias option', function() { let db;
before(function() { db = start(); });
after(async function() { await db.close(); });
beforeEach(() => db.deleteModel(/.*/)); afterEach(() => require('./util').clearTestData(db)); afterEach(() => require('./util').stopRemainingOps(db));
it('works with all basic schema types', function(done) { const schema = new Schema({ string: { type: String, alias: 'StringAlias' }, number: { type: Number, alias: 'NumberAlias' }, date: { type: Date, alias: 'DateAlias' }, buffer: { type: Buffer, alias: 'BufferAlias' }, boolean: { type: Boolean, alias: 'BooleanAlias' }, mixed: { type: Schema.Types.Mixed, alias: 'MixedAlias' }, objectId: { type: Schema.Types.ObjectId, alias: 'ObjectIdAlias' }, array: { type: [], alias: 'ArrayAlias' } });
const S = db.model('Test', schema); S.create({ string: 'hello', number: 1, date: new Date(), buffer: Buffer.from('World'), boolean: false, mixed: [1, [], 'three', { four: 5 }], objectId: new mongoose.Types.ObjectId(), array: ['a', 'b', 'c', 'd'] }, function(err, s) { assert.ifError(err);
// Comparing with aliases assert.equal(s.string, s.StringAlias); assert.equal(s.number, s.NumberAlias); assert.equal(s.date, s.DateAlias); assert.equal(s.buffer, s.BufferAlias); assert.equal(s.boolean, s.BooleanAlias); assert.equal(s.mixed, s.MixedAlias); assert.equal(s.objectId, s.ObjectIdAlias); assert.equal(s.array, s.ArrayAlias); done(); }); });
it('works with nested schema types', function(done) { const schema = new Schema({ nested: { string: { type: String, alias: 'StringAlias' }, number: { type: Number, alias: 'NumberAlias' }, date: { type: Date, alias: 'DateAlias' }, buffer: { type: Buffer, alias: 'BufferAlias' }, boolean: { type: Boolean, alias: 'BooleanAlias' }, mixed: { type: Schema.Types.Mixed, alias: 'MixedAlias' }, objectId: { type: Schema.Types.ObjectId, alias: 'ObjectIdAlias' }, array: { type: [], alias: 'ArrayAlias' } } });
const S = db.model('Test', schema); S.create({ nested: { string: 'hello', number: 1, date: new Date(), buffer: Buffer.from('World'), boolean: false, mixed: [1, [], 'three', { four: 5 }], objectId: new mongoose.Types.ObjectId(), array: ['a', 'b', 'c', 'd'] } }, function(err, s) { assert.ifError(err);
// Comparing with aliases assert.equal(s.nested.string, s.StringAlias); assert.equal(s.nested.number, s.NumberAlias); assert.equal(s.nested.date, s.DateAlias); assert.equal(s.nested.buffer, s.BufferAlias); assert.equal(s.nested.boolean, s.BooleanAlias); assert.equal(s.nested.mixed, s.MixedAlias); assert.equal(s.nested.objectId, s.ObjectIdAlias); assert.equal(s.nested.array, s.ArrayAlias); done(); }); });
it('throws when alias option is invalid', function() { assert.throws(function() { new Schema({ foo: { type: String, alias: 456 } }); }); });
it('with add() (gh-6593)', function() { const s = new Schema({ name: { type: String, alias: 'test1' } });
assert.deepEqual(Object.keys(s.aliases), ['test1']);
s.add({ name2: { type: String, alias: 'test2' } });
assert.deepEqual(Object.keys(s.aliases), ['test1', 'test2']); });
it('nested aliases (gh-6671)', function(done) { const childSchema = new Schema({ n: { type: String, alias: 'name' } }, { _id: false });
const parentSchema = new Schema({ // If in a child schema, alias doesn't need to include the full nested path c: childSchema, name: { f: { type: String, // Alias needs to include the full nested path if declared inline alias: 'name.first' } } }); // acquit:ignore:start mongoose.deleteModel(/Test/); const Parent = mongoose.model('Test', parentSchema); const doc = new Parent({ c: { name: 'foo' }, name: { first: 'bar' } }); assert.deepEqual(doc.toObject().c, { n: 'foo' }); assert.deepEqual(doc.toObject().name, { f: 'bar' }); done(); // acquit:ignore:end });
it('array of aliases (gh-12368)', function() { const productSchema = new Schema({ n: { type: String, alias: ['name', 'product_name'] } });
const Product = db.model('Test', productSchema); const doc = new Product({});
doc['product_name'] = 'Turbo Man'; assert.equal(doc.n, 'Turbo Man'); assert.equal(doc.name, 'Turbo Man'); });
it('alias() method (gh-12368)', function() { const schema = new Schema({ name: String });
schema.alias('name', 'otherName'); assert.equal(schema.aliases['otherName'], 'name'); assert.ok(schema.virtuals['otherName']);
schema.alias('name', ['name1', 'name2']); assert.equal(schema.aliases['name1'], 'name'); assert.equal(schema.aliases['name2'], 'name'); assert.ok(schema.virtuals['name1']); assert.ok(schema.virtuals['name2']); });});
Version Info