From b151f9324123eb03a7f84314dc6cf4b05edeb594 Mon Sep 17 00:00:00 2001 From: cory robinson Date: Thu, 20 Oct 2016 10:15:15 -0700 Subject: [PATCH 1/2] feat(): add adapter option mongoDriverOpts, add default option ignoreUndefined --- src/index.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 50ede48..7ffed98 100644 --- a/src/index.js +++ b/src/index.js @@ -32,7 +32,18 @@ const DEFAULTS = { * @type {string} * @default mongodb://localhost:27017 */ - uri: 'mongodb://localhost:27017' + uri: 'mongodb://localhost:27017', + + /** + * MongoDB Driver options + * + * @name MongoDBAdapter#mongoDriverOpts + * @type {object} + * @default { ignoreUndefined: true } + */ + mongoDriverOpts: { + ignoreUndefined: true + } } const COUNT_OPTS_DEFAULTS = {} @@ -185,7 +196,7 @@ export function MongoDBAdapter (opts) { utils.fillIn(this.removeOpts, REMOVE_OPTS_DEFAULTS) this.client = new utils.Promise((resolve, reject) => { - MongoClient.connect(opts.uri, (err, db) => { + MongoClient.connect(opts.uri, opts.mongoDriverOpts, (err, db) => { if (err) { return reject(err) } From 03628a176ea0d6792b444a41bdda59afde3fac6c Mon Sep 17 00:00:00 2001 From: cory robinson Date: Sat, 22 Oct 2016 10:43:48 -0700 Subject: [PATCH 2/2] test(): add test for default option ignoreUndefined --- test/update.test.js | 51 +++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/test/update.test.js b/test/update.test.js index 3bc42ea..d802916 100644 --- a/test/update.test.js +++ b/test/update.test.js @@ -1,26 +1,8 @@ +import * as JSData from 'js-data' + describe('MongoDBAdapter#find', function () { var adapter - // create a record to test update against - before(function () { - // var id - - // adapter = this.$$adapter - // User = this.$$user - - // return adapter.findAll(User, { - // name: 'John' - // }).then(function (users) { - // assert.equal(users.length, 0) - // return adapter.create(User, {name: 'John'}) - // }).then(function (user) { - // id = user._id - // return adapter.find(User, id.toString()) - // }).then(function (user) { - // assert.objectsEqual(user, {_id: id, name: 'John'}) - // }) - }) - beforeEach(function () { adapter = this.$$adapter // User = this.$$user @@ -29,4 +11,33 @@ describe('MongoDBAdapter#find', function () { it('should not support updateMany', function () { return assert.throws(adapter.updateMany) }) + + it('should ignore undefined when resource has schema', function () { + var id + + const schema = new JSData.Schema({ + 'type': 'object', + 'properties': { + 'name': { + 'type': 'string' + }, + 'b': { + 'type': 'string' + } + } + }) + const User = this.$$store.defineMapper('user', { schema: schema }) + + return adapter.findAll(User, { + name: 'John' + }).then(function (users) { + assert.equal(users.length, 0) + return adapter.create(User, {name: 'John'}) + }).then(function (user) { + id = user._id + return adapter.find(User, id.toString()) + }).then(function (user) { + assert.objectsEqual(user, {_id: id, name: 'John'}) + }) + }) })