2019-08-31 20:51:14 -07:00

47 lines
1.6 KiB
TypeScript

import { groupBy } from '@datahub/utils/array/group-by';
import { module, test } from 'qunit';
module('Unit | Utility | array/group-by', function() {
test('it groups by key', function(assert) {
const element = {
key: 'aStringValue'
};
const keyName = element.key;
const expectedGroupedResult = {
[keyName]: [element]
};
let actualGroupedResult = groupBy([element], 'key');
assert.deepEqual(actualGroupedResult, expectedGroupedResult, `expected result to have a list keyed by ${keyName}`);
let elements = [element, element];
actualGroupedResult = groupBy(elements, 'key');
assert.ok(Array.isArray(actualGroupedResult.aStringValue), `expected ${keyName} in result to be of type array`);
assert.equal(
actualGroupedResult.aStringValue.length,
elements.length,
`expected result key ${keyName} array length to be ${elements.length}`
);
const thirdElement = { key: 'bStringValue' };
elements = [...elements, thirdElement];
actualGroupedResult = groupBy(elements, 'key');
assert.ok(
Array.isArray(actualGroupedResult.aStringValue) && Array.isArray(actualGroupedResult.bStringValue),
`expected ${keyName} ${thirdElement.key} to arrays on the result from groupBy`
);
assert.equal(actualGroupedResult.bStringValue.length, 1, `expected a length of 1 for array at ${thirdElement.key}`);
const expectedGroupedResultB = {
[thirdElement.key]: [thirdElement]
};
assert.deepEqual(
actualGroupedResult[thirdElement.key],
expectedGroupedResultB[thirdElement.key],
`expected result list to deeply equal expectedGroupedResultB list`
);
});
});