From 279e9f83fff9c10555e4678f881d8c9c90e60211 Mon Sep 17 00:00:00 2001 From: Stephen Sawchuk Date: Wed, 31 Aug 2016 10:52:31 -0400 Subject: [PATCH 1/2] datastore: deep clone user objects --- packages/datastore/src/entity.js | 3 +++ packages/datastore/test/entity.js | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/packages/datastore/src/entity.js b/packages/datastore/src/entity.js index 57869aabd65..095d574c1a1 100644 --- a/packages/datastore/src/entity.js +++ b/packages/datastore/src/entity.js @@ -23,6 +23,7 @@ var arrify = require('arrify'); var createErrorClass = require('create-error-class'); +var extend = require('extend'); var is = require('is'); var entity = module.exports; @@ -285,6 +286,8 @@ function encodeValue(value) { if (is.object(value)) { if (!is.empty(value)) { + value = extend(true, {}, value); + for (var prop in value) { if (value.hasOwnProperty(prop)) { value[prop] = entity.encodeValue(value[prop]); diff --git a/packages/datastore/test/entity.js b/packages/datastore/test/entity.js index feea6cae641..6a84046d684 100644 --- a/packages/datastore/test/entity.js +++ b/packages/datastore/test/entity.js @@ -21,6 +21,7 @@ var deepStrictEqual = require('deep-strict-equal'); assert.deepStrictEqual = assert.deepStrictEqual || function() { return assert(deepStrictEqual.apply(this, arguments)); }; +var extend = require('extend'); var Datastore = require('../'); @@ -430,6 +431,22 @@ describe('entity', function() { assert.deepEqual(entity.encodeValue(value), expectedValueProto); }); + it('should clone an object', function() { + var value = { + a: { + b: { + obj: true + } + } + }; + + var originalValue = extend(true, {}, value); + + entity.encodeValue(value); + + assert.deepEqual(value, originalValue); + }); + it('should encode an empty object', function() { var value = {}; From 8d73dc6f86a9d06c70658148f1d10a5f974b9f1d Mon Sep 17 00:00:00 2001 From: Stephen Sawchuk Date: Wed, 31 Aug 2016 11:40:05 -0400 Subject: [PATCH 2/2] add notStrictEqual test --- packages/datastore/test/entity.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/datastore/test/entity.js b/packages/datastore/test/entity.js index 6a84046d684..bcdd69a5581 100644 --- a/packages/datastore/test/entity.js +++ b/packages/datastore/test/entity.js @@ -442,9 +442,10 @@ describe('entity', function() { var originalValue = extend(true, {}, value); - entity.encodeValue(value); + var encodedValue = entity.encodeValue(value); assert.deepEqual(value, originalValue); + assert.notStrictEqual(value, encodedValue); }); it('should encode an empty object', function() {