From 0e2d1c21f8e3e90398476495105d2a70d231eda9 Mon Sep 17 00:00:00 2001 From: Timur Sufiev Date: Fri, 17 Apr 2015 19:44:16 +0300 Subject: [PATCH] Cover with tests remaining non-trivial utility functions Change-Id: I169d97f7dc34e62cb4c1f8f97afd29edb211a29d Implements: blueprint merlin-unittests --- merlin/test/js/utilsSpec.js | 126 ++++++++++++++++++++++++++++++++---- 1 file changed, 113 insertions(+), 13 deletions(-) diff --git a/merlin/test/js/utilsSpec.js b/merlin/test/js/utilsSpec.js index c995c3a..8e8e087 100644 --- a/merlin/test/js/utilsSpec.js +++ b/merlin/test/js/utilsSpec.js @@ -27,15 +27,7 @@ describe('merlin.utils', function() { expect(array.condense()).toEqual([1, 0, 15, 7, 8]); }); }); - function extend(proto, extension) { - var newObj; - proto = (proto !== undefined ? proto : null); - newObj = Object.create(proto); - Object.keys(extension).forEach(function(key) { - newObj[key] = extension[key]; - }); - return newObj; - } + describe('extend function', function() { var obj; @@ -47,21 +39,129 @@ describe('merlin.utils', function() { }); it("doesn't remove existing keys from the resulting object", function() { - var newObj = extend(obj, {'key3': 30}); + var newObj = utils.extend(obj, {'key3': 30}); expect(newObj.key1).toBe(10); expect(newObj.key3).toBe(30); }); it('overrides keys with the same names as the ones in extension', function() { - var newObj = extend(obj, {'key2': 40}); + var newObj = utils.extend(obj, {'key2': 40}); expect(newObj.key2).toBe(40); }); it("doesn't touch the original object, even the keys with the same names", function() { - var newObj = extend(obj, {'key2': 40, 'key4': 50}); + var newObj = utils.extend(obj, {'key2': 40, 'key4': 50}); expect(obj.key1).toBe(10); expect(obj.key2).toBe(20); }); - }) + }); + + describe('getNewId function', function() { + it('two successive calls return different ids', function() { + var id1 = utils.getNewId(), + id2 = utils.getNewId(); + expect(id1).not.toEqual(id2); + }) + }); + + describe('groupByMetaKey function', function() { + var objCls = Barricade.create({ + '@type': Object, + 'key1': { + '@type': String, + '@meta': { + 'index': 0 + } + }, + 'key2': { + '@type': String, + '@meta': { + 'index': 0 + } + }, + 'key3': { + '@type': String, + '@default': 'key3', + '@meta': { + 'index': 1 + } + }, + 'key4': { + '@type': String, + '@default': 'key4', + '@meta': { + 'index': 2 + } + }, + 'key5': { + '@type': String, + '@default': 'key5' + } + }), + obj, items, groupedItems; + + beforeEach(function() { + obj = objCls.create(); + items = obj.getKeys().map(function(key) { + return obj.get(key); + }); + groupedItems = utils.groupByMetaKey(items, 'index'); + }); + + it('transforms an Array of Barricade objects another Array', function() { + expect(angular.isArray(groupedItems)).toBe(true); + }); + + it('items with same key go into same bucket and are ordered', function() { + expect(groupedItems[0].length).toBe(2); + expect(groupedItems[1].length).toBe(1); + expect(groupedItems[1][0].get()).toEqual('key3'); + expect(groupedItems[2].length).toBe(1); + expect(groupedItems[2][0].get()).toEqual('key4'); + }); + + it('items with same key go into same bucket and are ordered', function() { + expect(groupedItems[0].length).toBe(2); + expect(groupedItems[1].length).toBe(1); + expect(groupedItems[1][0].get()).toEqual('key3'); + expect(groupedItems[2].length).toBe(1); + expect(groupedItems[2][0].get()).toEqual('key4'); + }); + + it('items without given meta key by default go last', function() { + expect(groupedItems[3].length).toBe(1); + expect(groupedItems[3][0].get()).toBe('key5'); + }) + }); + + describe('getNextIDSuffix function', function() { + var containerCls = Barricade.create({ + '@type': Object, + '?': { + '@type': String + } + }), + regexp = /(object)-(\d+)/; + + it('works together with MutableObject', function() { + function test() { + var container = containerCls.create({'object-1': ''}); + return utils.getNextIDSuffix(container, regexp); + } + expect(test).not.toThrow(); + }); + + it('starts with 1 as suffix if no IDs match the pattern', function() { + var container = containerCls.create({'someid': 'foo'}), + suffix = utils.getNextIDSuffix(container, regexp); + expect(suffix).toBe(1); + }); + + it('starts with the next ordinal to the maximum suffix that was matched', function() { + var container = containerCls.create({'object-1': '', 'object-10': ''}), + suffix = utils.getNextIDSuffix(container, regexp); + expect(suffix).toBe(11); + }); + }); });