diff --git a/lib/datastore/request.js b/lib/datastore/request.js index 38f602213f8..986cebb9bb4 100644 --- a/lib/datastore/request.js +++ b/lib/datastore/request.js @@ -384,6 +384,8 @@ DatastoreRequest.prototype.save = function(entities, callback) { var req = { mutation: entities.reduce(function(acc, entityObject, index) { + entityObject = extend(true, {}, entityObject); + var ent = {}; var method = entityObject.method; delete entityObject.method; diff --git a/test/datastore/request.js b/test/datastore/request.js index cb73e7b0cc5..431c1560816 100644 --- a/test/datastore/request.js +++ b/test/datastore/request.js @@ -455,6 +455,32 @@ describe('Request', function() { ], done); }); + it('should not alter the provided data object', function(done) { + var entities = [ + { + key: key, + method: 'insert', + indexed: false, + data: { + value: { + a: 'b', + c: [1, 2, 3] + } + } + } + ]; + var expectedEntities = extend(true, {}, entities); + + request.makeReq_ = function() { + // By the time the request is made, the original object has already been + // transformed into a raw request. + assert.deepEqual(entities, expectedEntities); + done(); + }; + + request.save(entities, assert.ifError); + }); + it('should return apiResponse in callback', function(done) { var key = new entity.Key({ namespace: 'ns', path: ['Company'] }); var mockCommitResponse = {