From 72033b096d2b041c8aba9b03fa2a486703497675 Mon Sep 17 00:00:00 2001 From: Andrea Richiardi Date: Thu, 23 Mar 2017 11:12:58 -0700 Subject: [PATCH] Implement unwrap for lower-case type strings Avoid failing with a "No data type (B, BS, N, NS, S, SS)" error when type strings are not upper case. --- lib/AttributeValue.js | 5 +++-- tests/spec/AttributeValue.mockdata.js | 15 ++++++++++++++- tests/spec/AttributeValue.spec.js | 9 +++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/AttributeValue.js b/lib/AttributeValue.js index d396cfb..8984f81 100644 --- a/lib/AttributeValue.js +++ b/lib/AttributeValue.js @@ -168,10 +168,11 @@ function unwrap1(dynamoData) { if (keys.length !== 1) throw new Error('Unexpected DynamoDB AttributeValue'); var typeStr = keys[0]; - if (!unwrapFns.hasOwnProperty(typeStr)) + var typeStrUpperCase = typeStr.toUpperCase(); + if (!unwrapFns.hasOwnProperty(typeStrUpperCase)) throw errs.NoDatatype; var val = dynamoData[typeStr]; - return unwrapFns[typeStr] ? unwrapFns[typeStr](val) : val; + return unwrapFns[typeStrUpperCase] ? unwrapFns[typeStrUpperCase](val) : val; } /** diff --git a/tests/spec/AttributeValue.mockdata.js b/tests/spec/AttributeValue.mockdata.js index b482f76..92e7925 100644 --- a/tests/spec/AttributeValue.mockdata.js +++ b/tests/spec/AttributeValue.mockdata.js @@ -87,6 +87,15 @@ module.exports = { nothing1: { NULL: true } }, + obj2_lowercase_: { + key1: { s: 'str' }, + key1a: { ss: [ 'str1', 'str2', 'str3' ] }, + key2: { n: '1' }, + key2a: { ns: [ '1.1', '1.2', '1.3' ] }, + + nothing1: { null: true } + }, + obj3: { bin: new Buffer('Hi') }, @@ -95,7 +104,11 @@ module.exports = { bin: {B: new Buffer('Hi')} }, - objInvalid_: { + obj3_lowercase_: { + bin: {b: new Buffer('Hi')} + }, + + objInvalid_: { key1: { ABCD: 'str' } }, diff --git a/tests/spec/AttributeValue.spec.js b/tests/spec/AttributeValue.spec.js index 73c48e3..88b5589 100644 --- a/tests/spec/AttributeValue.spec.js +++ b/tests/spec/AttributeValue.spec.js @@ -8,8 +8,10 @@ describe("AttributeValue", function() { var obj1_ = mock.obj1_; var obj2 = mock.obj2; var obj2_ = mock.obj2_; + var obj2_lowercase_ = mock.obj2_lowercase_; var obj3 = mock.obj3; var obj3_ = mock.obj3_; + var obj3_lowercase_ = mock.obj3_lowercase_; var objInvalid_ = mock.objInvalid_; var singles = mock.singles; var singles_ = mock.singles_; @@ -59,6 +61,13 @@ describe("AttributeValue", function() { expect(bufferEqual(binUnwrap, obj3.bin)).toBe(true); }); + it("Unwrap lowercase type strings", function() { + expect(_.isEqual(util.unwrap(obj2_lowercase_), obj2)).toBe(true); + + var binUnwrap = util.unwrap(obj3_lowercase_).bin; + expect(bufferEqual(binUnwrap, obj3.bin)).toBe(true); + }); + it("Unwrap singles", function() { for (var i = 0; i < singles_.length; i++) expect(_.isEqual(util.unwrap1(singles_[i]), singles[i])).toBe(true);