Make sure id properties cannot be changed
This commit is contained in:
parent
7dc0fcd26f
commit
04348a1168
13
lib/dao.js
13
lib/dao.js
|
@ -1904,6 +1904,19 @@ DataAccessObject.prototype.updateAttributes = function updateAttributes(data, op
|
||||||
}
|
}
|
||||||
data = removeUndefined(data);
|
data = removeUndefined(data);
|
||||||
|
|
||||||
|
// Make sure id(s) cannot be changed
|
||||||
|
var idNames = Model.definition.idNames();
|
||||||
|
for (var i = 0, n = idNames.length; i < n; i++) {
|
||||||
|
var idName = idNames[i];
|
||||||
|
if (data[idName] !== undefined && data[idName] !== inst[idName]) {
|
||||||
|
var err = new Error('id property value cannot be updated: ' + idName);
|
||||||
|
err.statusCode = 400;
|
||||||
|
return process.nextTick(function() {
|
||||||
|
cb(err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var context = {
|
var context = {
|
||||||
Model: Model,
|
Model: Model,
|
||||||
where: byIdQuery(Model, getIdValue(Model, inst)).where,
|
where: byIdQuery(Model, getIdValue(Model, inst)).where,
|
||||||
|
|
|
@ -124,7 +124,7 @@ describe('datatypes', function () {
|
||||||
|
|
||||||
// update using updateAttributes
|
// update using updateAttributes
|
||||||
m.updateAttributes({
|
m.updateAttributes({
|
||||||
id: id, num: '10'
|
id: m.id, num: '10'
|
||||||
}, function (err, m) {
|
}, function (err, m) {
|
||||||
should.not.exist(err);
|
should.not.exist(err);
|
||||||
m.num.should.be.type('number');
|
m.num.should.be.type('number');
|
||||||
|
|
|
@ -425,7 +425,11 @@ describe('manipulation', function () {
|
||||||
|
|
||||||
before(function (done) {
|
before(function (done) {
|
||||||
Person.destroyAll(function () {
|
Person.destroyAll(function () {
|
||||||
person = Person.create({name: 'Mary', age: 15}, done);
|
Person.create({name: 'Mary', age: 15}, function(err, p) {
|
||||||
|
should.not.exist(err);
|
||||||
|
person = p;
|
||||||
|
done();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -466,6 +470,28 @@ describe('manipulation', function () {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should allow same id value on updateAttributes', function(done) {
|
||||||
|
person.updateAttributes({id: person.id, name: 'John'},
|
||||||
|
function(err, p) {
|
||||||
|
should.not.exist(err);
|
||||||
|
Person.findById(p.id, function(e, p) {
|
||||||
|
should.not.exist(e);
|
||||||
|
p.name.should.equal('John');
|
||||||
|
p.age.should.equal(15);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should fail if an id value is to be changed on updateAttributes',
|
||||||
|
function(done) {
|
||||||
|
person.updateAttributes({id: person.id + 1, name: 'John'},
|
||||||
|
function(err, p) {
|
||||||
|
should.exist(err);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should allows model instance on updateAttributes', function(done) {
|
it('should allows model instance on updateAttributes', function(done) {
|
||||||
person.updateAttributes(new Person({'name': 'John', age: undefined}),
|
person.updateAttributes(new Person({'name': 'John', age: undefined}),
|
||||||
function(err, p) {
|
function(err, p) {
|
||||||
|
|
Loading…
Reference in New Issue