Merge pull request #1105 from strongloop/newInstance_updateAttributes_2.x

Add 'isNewInstance' for updateAttributes
This commit is contained in:
Amirali Jafarian 2016-09-23 15:34:32 -04:00 committed by GitHub
commit 76398b7f45
3 changed files with 19 additions and 37 deletions

View File

@ -571,6 +571,7 @@ DataAccessObject.upsert = function(data, options, cb) {
var context = { var context = {
Model: Model, Model: Model,
data: data, data: data,
isNewInstance: info && info.isNewInstance,
hookState: ctx.hookState, hookState: ctx.hookState,
options: options, options: options,
}; };
@ -3100,6 +3101,7 @@ function(data, options, cb) {
data: context.data, data: context.data,
hookState: hookState, hookState: hookState,
options: options, options: options,
isNewInstance: false,
}; };
Model.notifyObserversOf('loaded', ctx, function(err) { Model.notifyObserversOf('loaded', ctx, function(err) {
if (err) return cb(err); if (err) return cb(err);

View File

@ -880,6 +880,7 @@ describe('Unoptimized connector', function() {
// disable optimized methods // disable optimized methods
ds.connector.updateOrCreate = false; ds.connector.updateOrCreate = false;
ds.connector.findOrCreate = false; ds.connector.findOrCreate = false;
ds.connector.upsertWithWhere = false;
require('./persistence-hooks.suite')(ds, should, { require('./persistence-hooks.suite')(ds, should, {
replaceOrCreateReportsNewInstance: true, replaceOrCreateReportsNewInstance: true,

View File

@ -1356,6 +1356,7 @@ module.exports = function(dataSource, should, connectorCapabilities) {
ctxRecorder.records.should.eql(aCtxForModel(TestModel, { ctxRecorder.records.should.eql(aCtxForModel(TestModel, {
data: { name: 'changed' }, data: { name: 'changed' },
isNewInstance: false,
})); }));
done(); done();
@ -2010,19 +2011,13 @@ module.exports = function(dataSource, should, connectorCapabilities) {
function(err, instance) { function(err, instance) {
if (err) return done(err); if (err) return done(err);
if (dataSource.connector.updateOrCreate) { ctxRecorder.records.should.eql(aCtxForModel(TestModel, {
ctxRecorder.records.should.eql(aCtxForModel(TestModel, { data: {
data: { id: 'new-id', name: 'a name' }, id: 'new-id',
})); name: 'a name',
} else { },
ctxRecorder.records.should.eql(aCtxForModel(TestModel, { isNewInstance: true,
data: { }));
id: 'new-id',
name: 'a name',
},
isNewInstance: true,
}));
}
done(); done();
}); });
}); });
@ -2034,24 +2029,13 @@ module.exports = function(dataSource, should, connectorCapabilities) {
{ id: existingInstance.id, name: 'updated name' }, { id: existingInstance.id, name: 'updated name' },
function(err, instance) { function(err, instance) {
if (err) return done(err); if (err) return done(err);
ctxRecorder.records.should.eql(aCtxForModel(TestModel, {
if (dataSource.connector.updateOrCreate) { data: {
ctxRecorder.records.should.eql(aCtxForModel(TestModel, { id: existingInstance.id,
data: { name: 'updated name',
id: existingInstance.id, },
name: 'updated name', isNewInstance: false,
}, }));
}));
} else {
ctxRecorder.records.should.eql(
aCtxForModel(TestModel, {
data: {
id: existingInstance.id,
name: 'updated name',
},
})
);
}
done(); done();
}); });
}); });
@ -3259,13 +3243,8 @@ module.exports = function(dataSource, should, connectorCapabilities) {
id: existingInstance.id, id: existingInstance.id,
name: 'updated name', name: 'updated name',
}, },
isNewInstance: false,
}); });
// For non-atomic implementation of upsertWithWhere on update, it calls
// updateAttributes. loaded hook of updateAttributes does not provide
// isNewInstance.
if (dataSource.connector.upsertWithWhere) {
expectedContext.isNewInstance = false;
}
ctxRecorder.records.should.eql(aCtxForModel(TestModel, expectedContext)); ctxRecorder.records.should.eql(aCtxForModel(TestModel, expectedContext));
done(); done();
}); });