From 5252fba3761d324f6a92580940a383c37ece2f1c Mon Sep 17 00:00:00 2001 From: David Cheung Date: Wed, 19 Oct 2016 17:59:39 -0400 Subject: [PATCH] allow batch create for persisted models In strong-remoting 3.x, we have stricken the coercion of inputs methods that are expecting an Object will nolonger accept an array as input, to preserve backwards compatibility we have added flag allowArray in remote arguments, which would accept an array of objects --- lib/persisted-model.js | 2 +- test/model.test.js | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/lib/persisted-model.js b/lib/persisted-model.js index 195b0f2e6..3a5af820c 100644 --- a/lib/persisted-model.js +++ b/lib/persisted-model.js @@ -640,7 +640,7 @@ module.exports = function(registry) { description: 'Create a new instance of the model and persist it into the data source.', accessType: 'WRITE', accepts: { - arg: 'data', type: 'object', model: typeName, + arg: 'data', type: 'object', model: typeName, allowArray: true, description: 'Model instance data', http: { source: 'body' }, }, diff --git a/test/model.test.js b/test/model.test.js index f4975f6ff..e8875e0b9 100644 --- a/test/model.test.js +++ b/test/model.test.js @@ -124,6 +124,44 @@ describe.onServer('Remote Methods', function() { app.use(loopback.rest()); }); + describe('Model.create(data, callback)', function() { + it('creates model', function(done) { + var anObject = { first: 'June' }; + request(app) + .post('/users') + // sends an object + .send(anObject) + .expect('Content-Type', /json/) + .expect(200) + .end(function(err, res) { + if (err) return done(err); + expect(res.body).to.have.property('id'); + expect(res.body).to.have.property('first', 'June'); + done(); + }); + }); + // batch create must be tested with a remote request because there are + // coercion being done on strong-remoting side + it('creates array of models', function(done) { + var arrayOfObjects = [ + { first: 'John' }, { first: 'Jane' }, + ]; + request(app) + .post('/users') + // sends an array of objects + .send(arrayOfObjects) + .expect('Content-Type', /json/) + .expect(200) + .end(function(err, res) { + if (err) return done(err); + expect(res.body.length).to.eql(2); + expect(res.body).to.have.deep.property('[0].first', 'John'); + expect(res.body).to.have.deep.property('[1].first', 'Jane'); + done(); + }); + }); + }); + // destoryAll is not exposed as a remoteMethod by default describe('Model.destroyAll(callback)', function() { it('Delete all Model instances from data source', function(done) { (new TaskEmitter())