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;
|
||||
process.nextTick(function() { cb(err); });
|
||||
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 = {
|
||||
|
|
|
@ -1576,6 +1576,33 @@ describe('manipulation', function() {
|
|||
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() {
|
||||
|
|
Loading…
Reference in New Issue