deno.land / x / mongoose@6.7.5 / test / document.isselected.test.js
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374/** * Module dependencies. */
'use strict';
const start = require('./common');
const Document = require('../lib/document');const EventEmitter = require('events').EventEmitter;const assert = require('assert');
const mongoose = start.mongoose;const Schema = mongoose.Schema;const ObjectId = Schema.ObjectId;const DocumentObjectId = mongoose.Types.ObjectId;
/** * Test Document constructor. */
function TestDocument() { Document.apply(this, arguments);}
/** * Inherits from Document. */
Object.setPrototypeOf(TestDocument.prototype, Document.prototype);
for (const i in EventEmitter.prototype) { TestDocument[i] = EventEmitter.prototype[i];}
/** * Set a dummy schema to simulate compilation. */
const em = new Schema({ title: String, body: String });em.virtual('works').get(function() { return 'em virtual works';});const schema = new Schema({ test: String, oids: [ObjectId], numbers: [Number], nested: { age: Number, cool: ObjectId, deep: { x: String }, path: String, setr: String }, nested2: { nested: String, yup: { nested: Boolean, yup: String, age: Number } }, em: [em], date: Date});TestDocument.prototype.$__setSchema(schema);
schema.virtual('nested.agePlus2').get(function() { return this.nested.age + 2;});schema.virtual('nested.setAge').set(function(v) { this.nested.age = v;});schema.path('nested.path').get(function(v) { return (this.nested.age || '') + (v ? v : '');});schema.path('nested.setr').set(function(v) { return v + ' setter';});
schema.path('date').set(function(v) { // should not have been cast to a Date yet assert.equal(typeof v, 'string'); return v;});
/** * Method subject to hooks. Simply fires the callback once the hooks are * executed. */
TestDocument.prototype.hooksTest = function(fn) { fn(null, arguments);};
/** * Test. */describe('document', function() { it('isSelected()', function() { let doc = new TestDocument();
doc.init({ test: 'test', numbers: [4, 5, 6, 7], nested: { age: 5, cool: DocumentObjectId.createFromHexString('4c6c2d6240ced95d0e00003c'), path: 'my path', deep: { x: 'a string' } }, notapath: 'i am not in the schema', em: [{ title: 'gocars' }] });
assert.ok(doc.isSelected('_id')); assert.ok(doc.isSelected('test')); assert.ok(doc.isSelected('numbers')); assert.ok(doc.isSelected('oids')); // even if no data assert.ok(doc.isSelected('nested')); assert.ok(doc.isSelected('nested.age')); assert.ok(doc.isSelected('nested.cool')); assert.ok(doc.isSelected('nested.path')); assert.ok(doc.isSelected('nested.deep')); assert.ok(doc.isSelected('nested.nope')); // not a path assert.ok(doc.isSelected('nested.deep.x')); assert.ok(doc.isSelected('nested.deep.x.no')); assert.ok(doc.isSelected('nested.deep.y')); // not a path assert.ok(doc.isSelected('noway')); // not a path assert.ok(doc.isSelected('notapath')); // not a path but in the _doc assert.ok(doc.isSelected('em')); assert.ok(doc.isSelected('em.title')); assert.ok(doc.isSelected('em.body')); assert.ok(doc.isSelected('em.nonpath')); // not a path
let selection = { test: 1, numbers: 1, 'nested.deep': 1, oids: 1 };
doc = new TestDocument(undefined, selection);
doc.init({ test: 'test', numbers: [4, 5, 6, 7], nested: { deep: { x: 'a string' } } });
assert.ok(doc.isSelected('_id')); assert.ok(doc.isSelected('test')); assert.ok(doc.isSelected('numbers')); assert.ok(doc.isSelected('oids')); // even if no data assert.ok(doc.isSelected('nested')); assert.ok(!doc.isSelected('nested.age')); assert.ok(!doc.isSelected('nested.cool')); assert.ok(!doc.isSelected('nested.path')); assert.ok(doc.isSelected('nested.deep')); assert.ok(!doc.isSelected('nested.nope')); assert.ok(doc.isSelected('nested.deep.x')); assert.ok(doc.isSelected('nested.deep.x.no')); assert.ok(doc.isSelected('nested.deep.y')); assert.ok(!doc.isSelected('noway')); assert.ok(!doc.isSelected('notapath')); assert.ok(!doc.isSelected('em')); assert.ok(!doc.isSelected('em.title')); assert.ok(!doc.isSelected('em.body')); assert.ok(!doc.isSelected('em.nonpath'));
assert.ok(doc.isSelected('_id test')); assert.ok(doc.isSelected('test nested.nope')); assert.ok(!doc.isSelected('nested.path nested.nope'));
assert.ok(doc.isSelected(['_id', 'test'])); assert.ok(doc.isSelected(['test', 'nested.nope'])); assert.ok(!doc.isSelected(['nested.path', 'nested.nope']));
selection = { 'em.title': 1 };
doc = new TestDocument(undefined, selection);
doc.init({ em: [{ title: 'one' }] });
assert.ok(doc.isSelected('_id')); assert.ok(!doc.isSelected('test')); assert.ok(!doc.isSelected('numbers')); assert.ok(!doc.isSelected('oids')); assert.ok(!doc.isSelected('nested')); assert.ok(!doc.isSelected('nested.age')); assert.ok(!doc.isSelected('nested.cool')); assert.ok(!doc.isSelected('nested.path')); assert.ok(!doc.isSelected('nested.deep')); assert.ok(!doc.isSelected('nested.nope')); assert.ok(!doc.isSelected('nested.deep.x')); assert.ok(!doc.isSelected('nested.deep.x.no')); assert.ok(!doc.isSelected('nested.deep.y')); assert.ok(!doc.isSelected('noway')); assert.ok(!doc.isSelected('notapath')); assert.ok(doc.isSelected('em')); assert.ok(doc.isSelected('em.title')); assert.ok(!doc.isSelected('em.body')); assert.ok(!doc.isSelected('em.nonpath'));
selection = { em: 0 };
doc = new TestDocument(undefined, selection); doc.init({ test: 'test', numbers: [4, 5, 6, 7], nested: { age: 5, cool: DocumentObjectId.createFromHexString('4c6c2d6240ced95d0e00003c'), path: 'my path', deep: { x: 'a string' } }, notapath: 'i am not in the schema' });
assert.ok(doc.isSelected('_id')); assert.ok(doc.isSelected('test')); assert.ok(doc.isSelected('numbers')); assert.ok(doc.isSelected('oids')); assert.ok(doc.isSelected('nested')); assert.ok(doc.isSelected('nested.age')); assert.ok(doc.isSelected('nested.cool')); assert.ok(doc.isSelected('nested.path')); assert.ok(doc.isSelected('nested.deep')); assert.ok(doc.isSelected('nested.nope')); assert.ok(doc.isSelected('nested.deep.x')); assert.ok(doc.isSelected('nested.deep.x.no')); assert.ok(doc.isSelected('nested.deep.y')); assert.ok(doc.isSelected('noway')); assert.ok(doc.isSelected('notapath')); assert.ok(!doc.isSelected('em')); assert.ok(!doc.isSelected('em.title')); assert.ok(!doc.isSelected('em.body')); assert.ok(!doc.isSelected('em.nonpath'));
selection = { _id: 0 };
doc = new TestDocument(undefined, selection); doc.init({ test: 'test', numbers: [4, 5, 6, 7], nested: { age: 5, cool: DocumentObjectId.createFromHexString('4c6c2d6240ced95d0e00003c'), path: 'my path', deep: { x: 'a string' } }, notapath: 'i am not in the schema' });
assert.ok(!doc.isSelected('_id')); assert.ok(doc.isSelected('nested.deep.x.no'));
doc = new TestDocument({ test: 'boom' }); assert.ok(doc.isSelected('_id')); assert.ok(doc.isSelected('test')); assert.ok(doc.isSelected('numbers')); assert.ok(doc.isSelected('oids')); assert.ok(doc.isSelected('nested')); assert.ok(doc.isSelected('nested.age')); assert.ok(doc.isSelected('nested.cool')); assert.ok(doc.isSelected('nested.path')); assert.ok(doc.isSelected('nested.deep')); assert.ok(doc.isSelected('nested.nope')); assert.ok(doc.isSelected('nested.deep.x')); assert.ok(doc.isSelected('nested.deep.x.no')); assert.ok(doc.isSelected('nested.deep.y')); assert.ok(doc.isSelected('noway')); assert.ok(doc.isSelected('notapath')); assert.ok(doc.isSelected('em')); assert.ok(doc.isSelected('em.title')); assert.ok(doc.isSelected('em.body')); assert.ok(doc.isSelected('em.nonpath'));
selection = { _id: 1 };
doc = new TestDocument(undefined, selection); doc.init({ _id: 'test' });
assert.ok(doc.isSelected('_id')); assert.ok(!doc.isSelected('test'));
doc = new TestDocument({ test: 'boom' }, true); assert.ok(doc.isSelected('_id')); assert.ok(doc.isSelected('test')); assert.ok(doc.isSelected('numbers')); assert.ok(doc.isSelected('oids')); assert.ok(doc.isSelected('nested')); assert.ok(doc.isSelected('nested.age')); assert.ok(doc.isSelected('nested.cool')); assert.ok(doc.isSelected('nested.path')); assert.ok(doc.isSelected('nested.deep')); assert.ok(doc.isSelected('nested.nope')); assert.ok(doc.isSelected('nested.deep.x')); assert.ok(doc.isSelected('nested.deep.x.no')); assert.ok(doc.isSelected('nested.deep.y')); assert.ok(doc.isSelected('noway')); assert.ok(doc.isSelected('notapath')); assert.ok(doc.isSelected('em')); assert.ok(doc.isSelected('em.title')); assert.ok(doc.isSelected('em.body')); assert.ok(doc.isSelected('em.nonpath'));
selection = { _id: 1, n: 1 };
doc = new TestDocument(undefined, selection); doc.init({ test: 'test', numbers: [4, 5, 6, 7], nested: { age: 5, cool: DocumentObjectId.createFromHexString('4c6c2d6240ced95d0e00003c'), path: 'my path', deep: { x: 'a string' } }, notapath: 'i am not in the schema' });
assert.ok(doc.isSelected('_id')); assert.ok(doc.isSelected('n')); assert.ok(!doc.isSelected('nested')); assert.ok(!doc.isSelected('nested.age')); assert.ok(!doc.isSelected('numbers')); });
it('isDirectSelected (gh-5063)', function() { const selection = { test: 1, numbers: 1, 'nested.deep': 1, oids: 1 };
const doc = new TestDocument(undefined, selection);
doc.init({ test: 'test', numbers: [4, 5, 6, 7], nested: { deep: { x: 'a string' } } });
assert.ok(doc.isDirectSelected('nested.deep')); assert.ok(!doc.isDirectSelected('nested.cool')); assert.ok(!doc.isDirectSelected('nested'));
assert.ok(doc.isDirectSelected('nested.deep nested')); assert.ok(!doc.isDirectSelected('nested.cool nested'));
assert.ok(doc.isDirectSelected(['nested.deep', 'nested'])); assert.ok(!doc.isDirectSelected(['nested.cool', 'nested'])); });});
Version Info