/** * Internal dependencies */ import { groupListOfObjectsBy } from '../index.js'; describe( 'groupListOfObjectsBy', () => { const objectList = [ { id: '1', name: 'Object name 1', type: 'type1', }, { id: '2', name: 'Object name 2', type: 'type1', }, { id: '3', name: 'Object name 3', type: 'type1', }, { id: '4', name: 'Object name 4', type: 'type2', }, ]; it( 'handles different params', () => { // Using these params should return an empty object. const emptyObject = groupListOfObjectsBy(); const otherEmptyObject = groupListOfObjectsBy( [] ); const anotherEmptyObject = groupListOfObjectsBy( 'not an array' ); expect( emptyObject ).toMatchObject( {} ); expect( otherEmptyObject ).toMatchObject( {} ); expect( anotherEmptyObject ).toMatchObject( {} ); // Not sending a key to use for grouping the elements will return the sent list const ungroupedList = groupListOfObjectsBy( objectList ); expect( ungroupedList.length ).toBe( 4 ); } ); it( 'groups objects by type', () => { const { type1, type2 } = groupListOfObjectsBy( objectList, 'type' ); expect( type1.length ).toBe( 3 ); expect( type2.length ).toBe( 1 ); } ); it( 'groups objects without type', () => { const objectWithoutType = { id: '5', name: 'Object name 5', }; objectList.push( objectWithoutType ); const { type1, type2 } = groupListOfObjectsBy( objectList, 'type', 'type2' ); expect( type1.length ).toBe( 3 ); expect( type2.length ).toBe( 2 ); } ); it( 'groups objects with a new type', () => { const objectWithNewType = { id: '6', name: 'Object name 4', type: 'type3', }; objectList.push( objectWithNewType ); const { type1, type2, type3 } = groupListOfObjectsBy( objectList, 'type', 'type2' ); expect( type1.length ).toBe( 3 ); expect( type2.length ).toBe( 2 ); expect( type3.length ).toBe( 1 ); } ); } );