Merge pull request #1763 from strongloop/fix/PK-coercion-in-replaceById
Fix coercion of PK value in `replaceById` method
This commit is contained in:
commit
74c43ca358
|
@ -2609,6 +2609,11 @@ DataAccessObject.replaceById = function(id, data, options, cb) {
|
||||||
err.statusCode = 400;
|
err.statusCode = 400;
|
||||||
process.nextTick(function() { cb(err); });
|
process.nextTick(function() { cb(err); });
|
||||||
return cb.promise;
|
return cb.promise;
|
||||||
|
} else {
|
||||||
|
// Ensure any type conversion applied by the instance constructor
|
||||||
|
// on `data.id` is applied on the `id` value too.
|
||||||
|
// Typically, MongoDB converts PK value from a string to an ObjectID.
|
||||||
|
id = inst[pkName];
|
||||||
}
|
}
|
||||||
|
|
||||||
let context = {
|
let context = {
|
||||||
|
|
|
@ -1576,6 +1576,33 @@ describe('manipulation', function() {
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('correctly coerces the PK value', async () => {
|
||||||
|
const created = await Post.create({
|
||||||
|
title: 'a title',
|
||||||
|
content: 'a content',
|
||||||
|
});
|
||||||
|
|
||||||
|
// Emulate what happens when model instance is received by REST API clients
|
||||||
|
const data = JSON.parse(JSON.stringify(created));
|
||||||
|
|
||||||
|
// Modify some of the data
|
||||||
|
data.title = 'Draft';
|
||||||
|
|
||||||
|
// Call replaceById to modify the database record
|
||||||
|
await Post.replaceById(data.id, data);
|
||||||
|
|
||||||
|
// Verify what has been stored
|
||||||
|
const found = await Post.findById(data.id);
|
||||||
|
found.toObject().should.eql({
|
||||||
|
id: created.id,
|
||||||
|
title: 'Draft',
|
||||||
|
content: 'a content',
|
||||||
|
});
|
||||||
|
|
||||||
|
// Verify that no warnings were triggered
|
||||||
|
Object.keys(Post._warned).should.be.empty();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('findOrCreate', function() {
|
describe('findOrCreate', function() {
|
||||||
|
|
Loading…
Reference in New Issue