diff --git a/dist/data-layer-helper.js b/dist/data-layer-helper.js index 23f0fbce..f69e2ee6 100644 --- a/dist/data-layer-helper.js +++ b/dist/data-layer-helper.js @@ -10,7 +10,7 @@ var f=/\[object (Boolean|Number|String|Function|Array|Date|RegExp|Arguments)\]/;function g(a){return null==a?String(a):(a=f.exec(Object.prototype.toString.call(Object(a))))?a[1].toLowerCase():"object"}function k(a,b){return Object.prototype.hasOwnProperty.call(Object(a),b)}function m(a){if(!a||"object"!=g(a)||a.nodeType||a==a.window)return!1;try{if(a.constructor&&!k(a,"constructor")&&!k(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}for(var b in a);return void 0===b||k(a,b)};function p(a,b){var c={},d=c;a=a.split(".");for(var e=0;e { expect(helper.processed_).toBe(true); }); + + describe('with the built in set command', function() { + let commandAPI; + beforeEach(() => { + commandAPI = function() { + dataLayer.push(arguments); + }; + }); + + it('registers set commands pushed before process', () => { + commandAPI('set', 'two', 2); + helper.process(); + + expect(helper.get('two')).toBe(2); + }); + + it('registers set commands pushed after process', () => { + helper.process(); + commandAPI('set', 'two', 2); + + expect(helper.get('two')).toBe(2); + }); + }); }); diff --git a/test/setCommand_test.js b/test/setCommand_test.js index 3f42fb8c..da89b60f 100644 --- a/test/setCommand_test.js +++ b/test/setCommand_test.js @@ -18,8 +18,7 @@ describe('The set command', () => { beforeEach(() => { dataLayer = []; dlh = new DataLayerHelper(dataLayer); - commandAPI('set', 'bar', 'foo'); - targetModel = Object.assign({}, dlh.abstractModelInterface_); + targetModel = {}; }); describe('with 2 argument format', () => { @@ -27,39 +26,39 @@ describe('The set command', () => { commandAPI('set', 'foo', 'bar'); targetModel['foo'] = 'bar'; - expect(dlh.abstractModelInterface_).toEqual(targetModel); + expect(dlh.model_).toEqual(targetModel); }); it('updates model using dot-notation without corrupting it.', () => { commandAPI('set', 'foobar.barfoo.val', 'testVal'); targetModel['foobar'] = {'barfoo': {'val': 'testVal'}}; - expect(dlh.abstractModelInterface_).toEqual(targetModel); + expect(dlh.model_).toEqual(targetModel); }); - it('results in no-op with unecpected number of arguments(0 args)', () => { + it('results in no-op with unexpected number of arguments(0 args)', () => { commandAPI('set'); - expect(dlh.abstractModelInterface_).toEqual(targetModel); + expect(dlh.model_).toEqual(targetModel); }); - it('results in no-op with unecpected number of arguments: 3 args', () => { + it('results in no-op with unexpected number of arguments: 3 args', () => { commandAPI('set', 'foo', 'bar', 'extra'); - expect(dlh.abstractModelInterface_).toEqual(targetModel); + expect(dlh.model_).toEqual(targetModel); }); - it('results in no-op with an unecpected type for 1st argument', () => { + it('results in no-op with an unexpected type for 1st argument', () => { commandAPI('set', 2, 'bar'); - expect(dlh.abstractModelInterface_).toEqual(targetModel); + expect(dlh.model_).toEqual(targetModel); }); it('updates existing key with new val', () => { commandAPI('set', 'foo', 'newBar'); targetModel['foo'] = 'newBar'; - expect(dlh.abstractModelInterface_).toEqual(targetModel); + expect(dlh.model_).toEqual(targetModel); }); }); @@ -69,20 +68,20 @@ describe('The set command', () => { commandAPI('set', {'yes': 'no'}); targetModel['yes'] = 'no'; - expect(dlh.abstractModelInterface_).toEqual(targetModel); - } + expect(dlh.model_).toEqual(targetModel); + }, ); it('updates model without corruption with multiple key-val pairs', () => { commandAPI('set', - {'yes': 'no', 'hello': 'world', 'goodbye': 'bluesky'}); + {'yes': 'no', 'hello': 'world', 'goodbye': 'bluesky'}); targetModel['yes'] = 'no'; targetModel['hello'] = 'world'; targetModel['goodbye'] = 'bluesky'; - expect(dlh.abstractModelInterface_).toEqual(targetModel); - } + expect(dlh.model_).toEqual(targetModel); + }, ); it('updates model without corruption with nested key-val pairs', @@ -90,13 +89,13 @@ describe('The set command', () => { commandAPI('set', {'yes': {'yes': 'no', 'no': 'yes'}}); targetModel['yes'] = {'yes': 'no', 'no': 'yes'}; - expect(dlh.abstractModelInterface_).toEqual(targetModel); + expect(dlh.model_).toEqual(targetModel); commandAPI('set', {'yes': {'yes': 'yes'}}); targetModel['yes'] = {'yes': 'yes', 'no': 'yes'}; - expect(dlh.abstractModelInterface_).toEqual(targetModel); - } + expect(dlh.model_).toEqual(targetModel); + }, ); it('updates model by merging existing array with a new one', @@ -104,7 +103,7 @@ describe('The set command', () => { commandAPI('set', {'array': [1, 2, 3]}); targetModel['array'] = [1, 2, 3]; - expect(dlh.abstractModelInterface_).toEqual(targetModel); + expect(dlh.model_).toEqual(targetModel); const testArray = []; testArray[3] = 4; @@ -113,14 +112,14 @@ describe('The set command', () => { commandAPI('set', {'array': testArray}); targetModel['array'] = [1, 2, 3, 4, 5, 6]; - expect(dlh.abstractModelInterface_).toEqual(targetModel); + expect(dlh.model_).toEqual(targetModel); const testArray2 = [undefined, undefined, undefined]; commandAPI('set', {'array': testArray2}); targetModel['array'] = [undefined, undefined, undefined, 4, 5, 6]; - expect(dlh.abstractModelInterface_).toEqual(targetModel); - } + expect(dlh.model_).toEqual(targetModel); + }, ); it('updates model by merging existing object with a new one', @@ -128,21 +127,39 @@ describe('The set command', () => { commandAPI('set', {'object': {'test': 'value'}}); targetModel['object'] = {'test': 'value'}; - expect(dlh.abstractModelInterface_).toEqual(targetModel); + expect(dlh.model_).toEqual(targetModel); commandAPI('set', {'object': {'value': 'test'}}); targetModel['object'] = {'value': 'test', 'test': 'value'}; - expect(dlh.abstractModelInterface_).toEqual(targetModel); - } + expect(dlh.model_).toEqual(targetModel); + }, ); it('results in no-op when single argument is not an object', () => { commandAPI('set', 'no op'); - expect(dlh.abstractModelInterface_).toEqual(targetModel); - } + expect(dlh.model_).toEqual(targetModel); + }, ); }); + + it('does not modify the abstractModelInterface', () => { + commandAPI('set', 'a key', 'value'); + commandAPI('set', {'b key': 'value'}); + + expect(dlh.abstractModelInterface_).toEqual({ + get: jasmine.any(Function), + set: jasmine.any(Function), + }); + }); + + it('creates values accessible by the abstract model interface', () => { + commandAPI('set', 'a key', 'value'); + commandAPI('set', {'b key': 'value2'}); + + expect(dlh.abstractModelInterface_.get('a key')).toEqual('value'); + expect(dlh.abstractModelInterface_.get('b key')).toEqual('value2'); + }); });