Merge pull request #31 from wimvelzeboer/feature/MoreDomainMethods

Improve fflib_SObjects2.getSObjectsByIdField
This commit is contained in:
William Velzeboer
2022-02-24 12:48:56 +00:00
committed by GitHub
4 changed files with 40 additions and 3 deletions
@@ -22,11 +22,27 @@ public inherited sharing class ${NAME}
return (List<${SObject_API_Name}>) getRecords();
}
public Map<Id, ${SObject_API_Name}> getById()
{
return new Map<Id, ${SObject_API_Name}>(get${NAME}());
}
public I${NAME} selectById(Set<Id> ids)
{
return new ${NAME}(getRecords(ids));
}
private I${NAME} get${NAME}ByIdField(Schema.SObjectField sObjectField)
{
Map<Id, List<SObject>> sObjectsById = getSObjectsById(sObjectField);
Map<Id, I${NAME}> result = new Map<Id, I${NAME}>();
for (Id idValue : sObjectsById.keySet())
{
result.put(idValue, new ${NAME}(sObjectsById.get(idValue)));
}
return result;
}
private I${NAME} selectBy(fflib_Criteria criteria)
{
return new ${NAME}(getRecords(criteria));
@@ -2,5 +2,6 @@ public interface I${NAME}
extends fflib_ISObjects
{
List<${SObject_API_Name}> get${NAME}();
Map<Id, ${SObject_API_Name}> getById();
I${NAME} selectById(Set<Id> ids);
}
@@ -703,8 +703,8 @@ public virtual class fflib_SObjects2
* @return Returns a map with the records mapped to the given String field value
*
* @example
* Account account = Account.newInstance(records);
* Map<String, SObject> accountByName = account.getSObjectsByStringField(Account.AccountName);
* Accounts accounts = Account.newInstance(records);
* Map<String, List<SObject>> accountByName = accounts.getSObjectsByStringField(Account.AccountName);
*/
@TestVisible
protected virtual Map<String, List<SObject>> getSObjectsByStringField(Schema.SObjectField sObjectField)
@@ -112,7 +112,6 @@ private class fflib_SObjects2Test
domain.getDoubleFieldValues(Account.BillingLatitude);
domain.getDoubleFieldValues(Account.BillingLatitude, criteria);
domain.getSObjectByIdField(Account.Id);
domain.getSObjectsByIdField(Account.Id);
domain.getSObjectByStringField(Account.Name);
domain.getSObjectsByStringField(Account.Name);
domain.getStringFieldByStringField(Account.Name, Account.AccountNumber);
@@ -516,6 +515,27 @@ private class fflib_SObjects2Test
System.assertEquals(accountName, (String) results.get(0).get(Schema.Account.Name));
}
@IsTest
static void itShouldGetRecordsByIdFieldValues()
{
final Id accountIdA = fflib_IDGenerator.generate(Schema.Account.SObjectType);
final Id accountIdB = fflib_IDGenerator.generate(Schema.Account.SObjectType);
List<Contact> records = new List<Contact> {
new Contact(AccountId = accountIdA),
new Contact(AccountId = accountIdA),
new Contact(AccountId = accountIdB),
new Contact(AccountId = accountIdB),
new Contact(AccountId = accountIdB)
};
fflib_SObjects2 domain = new fflib_SObjects2(records);
Map<Id, List<SObject>> results = domain.getSObjectsByIdField(Schema.Contact.AccountId);
System.assertEquals(2, results.size());
System.assertEquals(2, results.get(accountIdA).size());
System.assertEquals(3, results.get(accountIdB).size());
}
@IsTest
static void itShouldSetField()
{