Sure. Here is one example from run I performed just now.
TypeScript utility method I generated cases and tests for
-------
static merge(arr1: T[], arr2: T[]): T[] {
arr1 = arr1 || [];
arr2 = arr2 || [];
// Create a map for quick access to items in arr1 by id
const map = new Map(arr1.map((item) => [item.id, item]));
// Iterate over arr2 and merge or add items
arr2.forEach((item) => {
if (map.has(item.id)) {
// If item exists in arr1, merge it
map.set(item.id, { ...map.get(item.id), ...item });
} else {
// If item doesn't exist in arr1, add it
map.set(item.id, item);
}
});
// Convert the map back to an array
return Array.from(map.values());
}
Generated test cases
-------------
POSITIVE - Merging two arrays with unique and overlapping objects by id
Given: Two arrays of objects with unique and overlapping ids
When: Merging two arrays of objects where some objects have matching ids
Then: Should return an array of merged objects with no duplicates and combined properties for overlapping ids
NEGATIVE - Merging arrays when second array contains objects with undefined ids
Given: First array of objects with valid ids and second array with some objects having undefined ids
When: Second array contains objects with undefined ids
Then: Should throw an error or handle undefined ids gracefully without merging those objects
EDGE CASE - Merging arrays where all objects in the second array have matching ids in the first array
Given: Two arrays of objects with ids where the second array's objects all have ids that match those in the first array
When: Every object in the second array has a matching id in the first array
Then: Should return an array with objects from the first array having their properties updated by the second array's objects
Generated unit tests by test cases
-------------
---> 1st case
---------------
it('Merging two arrays with unique and overlapping objects by id should return an array of merged objects with no duplicates and combined properties for overlapping ids', () => {
// Arrange
const arr1 = [{ id: '1', name: 'Alice' }, { id: '2', name: 'Bob' }];
const arr2 = [{ id: '2', name: 'Robert' }, { id: '3', name: 'Charlie' }];
const expectedResult = [
{ id: '1', name: 'Alice' },
{ id: '2', name: 'Robert' }, // Note: 'Bob' is overwritten by 'Robert'
{ id: '3', name: 'Charlie' }
];
// Act
const result = merge(arr1, arr2);
// Assert
expect(result).toEqual(expectedResult);
});
---> 2nd case
----------------
it('Merging arrays when second array contains objects with undefined ids should throw an error or handle undefined ids gracefully', () => {
// Arrange
const arr1 = [{ id: '1', name: 'Alice' }, { id: '2', name: 'Bob' }];
const arr2 = [{ id: '2', age: 30 }, { name: 'Charlie' }]; // Charlie has undefined id
// Act and Assert
expect(() => MyArrayUtils.merge(arr1, arr2)).toThrow();
});
---> 3rd case
----------------
it('Merging arrays where all objects in the second array have matching ids in the first array', () => {
// Arrange
const arr1 = [{ id: '1', propA: 'A1' }, { id: '2', propA: 'A2' }];
const arr2 = [{ id: '1', propB: 'B1' }, { id: '2', propB: 'B2' }];
const expectedResult = [
{ id: '1', propA: 'A1', propB: 'B1' },
{ id: '2', propA: 'A2', propB: 'B2' }
];
// Act
const result = merge(arr1, arr2);
// Assert
expect(result).toEqual(expectedResult);
});