diff --git a/common/script/libs/refPush.js b/common/script/libs/refPush.js index 06b3617014..1bdddc9edf 100644 --- a/common/script/libs/refPush.js +++ b/common/script/libs/refPush.js @@ -7,13 +7,14 @@ import uuid from './uuid'; no problem. To maintain sorting, we use these helper functions: */ -module.exports = function(reflist, item, prune) { - if (prune == null) { - prune = 0; - } +module.exports = function refPush (reflist, item) { item.sort = _.isEmpty(reflist) ? 0 : _.max(reflist, 'sort').sort + 1; + if (!(item.id && !reflist[item.id])) { item.id = uuid(); } - return reflist[item.id] = item; + + reflist[item.id] = item; + + return reflist[item.id]; }; diff --git a/tasks/gulp-eslint.js b/tasks/gulp-eslint.js index e283b0d8eb..1943e8bd78 100644 --- a/tasks/gulp-eslint.js +++ b/tasks/gulp-eslint.js @@ -69,7 +69,6 @@ const COMMON_FILES = [ '!./common/script/libs/planGemLimits.js', '!./common/script/libs/preenHistory.js', '!./common/script/libs/preenTodos.js', - '!./common/script/libs/refPush.js', '!./common/script/libs/removeWhitespace.js', '!./common/script/libs/silver.js', '!./common/script/libs/splitWhitespace.js', diff --git a/test/common/libs/refPush.js b/test/common/libs/refPush.js new file mode 100644 index 0000000000..4183845c9a --- /dev/null +++ b/test/common/libs/refPush.js @@ -0,0 +1,53 @@ +import shared from '../../../common'; +import { v4 as generateUUID } from 'uuid'; + +describe('refPush', () => { + it('it hashes one object into another by its id', () => { + let referenceObject = {}; + let objectToHash = { + a: 1, + id: generateUUID(), + }; + + shared.refPush(referenceObject, objectToHash); + + expect(referenceObject[objectToHash.id].a).to.equal(objectToHash.a); + expect(referenceObject[objectToHash.id].id).to.equal(objectToHash.id); + expect(referenceObject[objectToHash.id].sort).to.equal(0); + }); + + it('it hashes one object into another by a uuid when object does not have an id', () => { + let referenceObject = {}; + let objectToHash = { + a: 1, + }; + + shared.refPush(referenceObject, objectToHash); + + let hashedObject = _.find(referenceObject, (hashedItem) => { + return objectToHash.a === hashedItem.a; + }); + + expect(hashedObject.a).to.equal(objectToHash.a); + expect(hashedObject.id).to.equal(objectToHash.id); + expect(hashedObject.sort).to.equal(0); + }); + + it('it hashes one object into another by a id and gives it the highest sort value', () => { + let referenceObject = {}; + referenceObject[generateUUID()] = { b: 2, sort: 1 }; + let objectToHash = { + a: 1, + }; + + shared.refPush(referenceObject, objectToHash); + + let hashedObject = _.find(referenceObject, (hashedItem) => { + return objectToHash.a === hashedItem.a; + }); + + expect(hashedObject.a).to.equal(objectToHash.a); + expect(hashedObject.id).to.equal(objectToHash.id); + expect(hashedObject.sort).to.equal(2); + }); +});