diff --git a/lib/dao.js b/lib/dao.js index 24bd6682..516b21c4 100644 --- a/lib/dao.js +++ b/lib/dao.js @@ -2301,6 +2301,7 @@ DataAccessObject.updateAll = function(where, data, options, cb) { if (!(data instanceof Model)) { try { inst = new Model(data, {applyDefaultValues: false}); + ctx.data = inst.toObject(true); } catch (err) { return cb(err); } diff --git a/test/basic-querying.test.js b/test/basic-querying.test.js index 3e79be45..0fb605d2 100644 --- a/test/basic-querying.test.js +++ b/test/basic-querying.test.js @@ -1055,6 +1055,40 @@ describe('basic-querying', function() { }); }); + describe('updateAll', function() { + it('coerces primitive datatypes on update', async () => { + const numAndDateModel = db.define('numAndDateModel', { + dateProp: Date, + dateArray: [Date], + numProp: Number, + numArray: [Number], + }); + const createDate = new Date('2019-02-21T12:00:00').toISOString(); + const createData = { + dateProp: createDate, + dateArray: [createDate, createDate], + numProp: '1', + numArray: ['1', '2'], + }; + const updateDate = new Date('2019-04-15T12:00:00').toISOString(); + const updateData = { + dateProp: updateDate, + dateArray: [updateDate, updateDate], + numProp: '3', + numArray: ['3', '4'], + }; + const created = await numAndDateModel.create(createData); + const updated = await numAndDateModel.updateAll({id: created.id}, updateData); + const found = await numAndDateModel.findById(created.id); + found.dateProp.should.deepEqual(new Date(updateDate)); + found.dateArray[0].should.deepEqual(new Date(updateDate)); + found.dateArray[1].should.deepEqual(new Date(updateDate)); + found.numProp.should.equal(3); + found.numArray[0].should.equal(3); + found.numArray[1].should.equal(4); + }); + }); + context('regexp operator', function() { const invalidDataTypes = [0, true, {}, [], Function, null]; diff --git a/test/manipulation.test.js b/test/manipulation.test.js index f5808eaa..1d416bcb 100644 --- a/test/manipulation.test.js +++ b/test/manipulation.test.js @@ -2366,7 +2366,7 @@ describe('manipulation', function() { it('should not coerce invalid values provided in where conditions', function(done) { Person.update({name: 'Brett Boe'}, {dob: 'notadate'}, function(err) { should.exist(err); - err.message.should.equal('Invalid date: notadate'); + err.message.should.equal('Invalid date: Invalid Date'); done(); }); });