Merge pull request #1210 from strongloop/forceId-true
Fix forceId validation error
This commit is contained in:
commit
023856cbe9
|
@ -793,7 +793,9 @@ Memory.prototype.replaceById = function(model, id, data, options, cb) {
|
||||||
var modelData = cachedModels && this.collection(model)[id];
|
var modelData = cachedModels && this.collection(model)[id];
|
||||||
if (!modelData) {
|
if (!modelData) {
|
||||||
var msg = 'Could not replace. Object with id ' + id + ' does not exist!';
|
var msg = 'Could not replace. Object with id ' + id + ' does not exist!';
|
||||||
return process.nextTick(function() { cb(new Error(msg)); });
|
var error = new Error(msg);
|
||||||
|
error.statusCode = error.status = 404;
|
||||||
|
return process.nextTick(function() { cb(error); });
|
||||||
}
|
}
|
||||||
|
|
||||||
var newModelData = {};
|
var newModelData = {};
|
||||||
|
|
|
@ -840,6 +840,11 @@ DataAccessObject.replaceOrCreate = function replaceOrCreate(data, options, cb) {
|
||||||
return this.create(data, options, cb);
|
return this.create(data, options, cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var forceId = this.settings.forceId;
|
||||||
|
if (forceId) {
|
||||||
|
return Model.replaceById(id, data, options, cb);
|
||||||
|
}
|
||||||
|
|
||||||
var inst;
|
var inst;
|
||||||
if (data instanceof Model) {
|
if (data instanceof Model) {
|
||||||
inst = data;
|
inst = data;
|
||||||
|
|
|
@ -12,6 +12,7 @@ var should = require('./init.js');
|
||||||
|
|
||||||
var db, Person;
|
var db, Person;
|
||||||
var ValidationError = require('..').ValidationError;
|
var ValidationError = require('..').ValidationError;
|
||||||
|
var bdd = require('./helpers/bdd-if.js');
|
||||||
|
|
||||||
var UUID_REGEXP = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
var UUID_REGEXP = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
||||||
|
|
||||||
|
@ -1097,6 +1098,52 @@ describe('manipulation', function() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var hasReplaceById = !!getSchema().connector.replaceById;
|
||||||
|
bdd.describeIf(hasReplaceById, 'replaceOrCreate when forceId is true', function() {
|
||||||
|
var Post;
|
||||||
|
before(function(done) {
|
||||||
|
var ds = getSchema();
|
||||||
|
Post = ds.define('Post', {
|
||||||
|
title: {type: String, length: 255},
|
||||||
|
content: {type: String},
|
||||||
|
}, {forceId: true});
|
||||||
|
ds.automigrate('Post', done);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails when id does not exist in db', function(done) {
|
||||||
|
var post = {id: 123, title: 'a', content: 'AAA'};
|
||||||
|
Post.replaceOrCreate(post, function(err, p) {
|
||||||
|
err.statusCode.should.equal(404);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('works on create if the request does not include an id', function(done) {
|
||||||
|
var post = {title: 'a', content: 'AAA'};
|
||||||
|
Post.replaceOrCreate(post, function(err, p) {
|
||||||
|
if (err) return done(err);
|
||||||
|
p.title.should.equal(post.title);
|
||||||
|
p.content.should.equal(post.content);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('works on update if the request includes an existing id in db', function(done) {
|
||||||
|
Post.create({title: 'a', content: 'AAA'},
|
||||||
|
function(err, post) {
|
||||||
|
if (err) return done(err);
|
||||||
|
post = post.toObject();
|
||||||
|
delete post.content;
|
||||||
|
post.title = 'b';
|
||||||
|
Post.replaceOrCreate(post, function(err, p) {
|
||||||
|
if (err) return done(err);
|
||||||
|
p.id.should.equal(post.id);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
if (!getSchema().connector.replaceById) {
|
if (!getSchema().connector.replaceById) {
|
||||||
describe.skip('replaceAttributes/replaceById - not implemented', function() {});
|
describe.skip('replaceAttributes/replaceById - not implemented', function() {});
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue