Add mergeMap to fflib_ArrayUtils

Signed-off-by: WimVelzeboer <wimvelzeboer@protonmail.com>
This commit is contained in:
WimVelzeboer
2022-03-16 10:06:58 +00:00
parent d139917d69
commit 3335482e8f
2 changed files with 60 additions and 5 deletions
@@ -205,6 +205,31 @@ public class fflib_ArrayUtils
return lastValue(cloneAndSort(input));
}
/**
* Merge the given two maps, without modifying the source.
*
* @param mapA Map<Id, Set<String>>
* @param mapB Map<Id, Set<String>>
*
* @return Returns the merged map
*/
public static Map<Id, Set<String>> mergeMaps(Map<Id, Set<String>> mapA, Map<Id, Set<String>> mapB)
{
Map<Id, Set<String>> result = mapA.clone();
for (Id idValue : mapB.keySet())
{
if (result.containsKey(idValue))
{
result.get(idValue).addAll(mapB.get(idValue));
}
else
{
result.put(idValue, mapB.get(idValue));
}
}
return result;
}
/**
* Sorts the list with Datetime values and return the oldest value in the list
*
@@ -242,10 +242,10 @@ private class fflib_ArrayUtilsTest
static void itShouldReturnAllValuesForTheGivenIds()
{
// GIVEN a map with String by Ids
Id accountIdA = fflib_IDGenerator.generate(Schema.Account.SObjectType);
Id accountIdB = fflib_IDGenerator.generate(Schema.Account.SObjectType);
Id accountIdC = fflib_IDGenerator.generate(Schema.Account.SObjectType);
Map<Id, String> stringsByIds = new Map<Id, String>
final Id accountIdA = fflib_IDGenerator.generate(Schema.Account.SObjectType);
final Id accountIdB = fflib_IDGenerator.generate(Schema.Account.SObjectType);
final Id accountIdC = fflib_IDGenerator.generate(Schema.Account.SObjectType);
final Map<Id, String> stringsByIds = new Map<Id, String>
{
accountIdA => 'Account A',
accountIdB => 'Account B',
@@ -256,7 +256,37 @@ private class fflib_ArrayUtilsTest
Set<String> result = fflib_ArrayUtils.getAllValues(stringsByIds, new Set<Id> {accountIdA, accountIdB});
// THEN we get the values of the provide sub-set Ids
System.assert(result.containsAll(new Set<String>{'Account A', 'Account B'}));
System.assert(result.containsAll(new Set<String> {'Account A', 'Account B'}));
}
@IsTest
static void itShouldReturnMergedMap()
{
final Id accountIdA = fflib_IDGenerator.generate(Schema.Account.SObjectType);
final Id accountIdB = fflib_IDGenerator.generate(Schema.Account.SObjectType);
final Id accountIdC = fflib_IDGenerator.generate(Schema.Account.SObjectType);
final Set<Id> ids = new Set<Id> {accountIdA, accountIdB, accountIdC};
final Map<Id, Set<String>> stringsByIdsA = new Map<Id, Set<String>>
{
accountIdA => new Set<String> {'A1', 'A2'},
accountIdB => new Set<String> {'B1'}
};
final Map<Id, Set<String>> stringsByIdsB = new Map<Id, Set<String>>
{
accountIdA => new Set<String> {'A3'},
accountIdC => new Set<String> {'C1'}
};
Map<Id, Set<String>> result = fflib_ArrayUtils.mergeMaps(stringsByIdsA, stringsByIdsB);
System.assert(result.keySet().containsAll(ids));
System.assert(result.get(accountIdA).containsAll(new Set<String>{'A1', 'A2', 'A3'}));
System.assert(result.get(accountIdA).size() == 3);
System.assert(result.get(accountIdB).contains('B1'));
System.assert(result.get(accountIdB).size() == 1);
System.assert(result.get(accountIdC).contains('C1'));
System.assert(result.get(accountIdC).size() == 1);
}
private static List<Datetime> generateDateTimes()