Add getBooleanFieldByIdField method to fflib_SObjects2 (#72)

This commit is contained in:
William Velzeboer
2026-01-19 10:52:04 +00:00
committed by GitHub
parent babc2081f6
commit 82e84354d5
3 changed files with 46 additions and 22 deletions
+3
View File
@@ -53,6 +53,9 @@ Some of the changes that have major impact are listed here;
- **fflib_ArrayUtils** <br/> - **fflib_ArrayUtils** <br/>
_replaceValue_,<br/>Add three method overloads for merging a source map of idById and replacement map of idByString, idByDecimal or idByBoolean.</br> _replaceValue_,<br/>Add three method overloads for merging a source map of idById and replacement map of idByString, idByDecimal or idByBoolean.</br>
_mergeMaps_,<br/>Add method overload to merge two maps of idByBoolean, _mergeMaps_,<br/>Add method overload to merge two maps of idByBoolean,
- **fflib_SObjects2**<br/>
The following methods have been added to the SObjects2 class:<br/>
_getBooleanFieldByIdField_
- **API Upgrades** - **API Upgrades**
Upgraded to API 65.0 Upgraded to API 65.0
@@ -67,6 +67,31 @@ public virtual class fflib_SObjects2
SObjectDescribe = sObjectType.getDescribe(); SObjectDescribe = sObjectType.getDescribe();
} }
/**
* Get a map with the given Boolean field value mapped to the given Id field
* Key fields containing null values are omitted
*
* @param valueField The Boolean field to use as value for the map
* @param keyField The Id field to use as key for the map
*
* @return a map with the given Boolean field value mapped to the given Id field
*
* @example
* Account account = Account.newInstance(records);
* Map<Id, Boolean> isDeletedById = account.getBooleanFieldByIdField(Account.IsDeleted, Account.Id);
*/
@TestVisible
protected virtual Map<Id, Boolean> getBooleanFieldByIdField(Schema.SObjectField valueField, Schema.SObjectField keyField)
{
Map<Id, Boolean> result = new Map<Id, Boolean>();
Map<Object, Object> fieldByField = getFieldByField(valueField, keyField);
for (Object obj : fieldByField.keySet())
{
result.put((Id) obj, (Boolean) fieldByField.get(obj));
}
return result;
}
/** /**
* @param id Domain containing primary key (Id field) values * @param id Domain containing primary key (Id field) values
* *
@@ -115,6 +115,7 @@ private class fflib_SObjects2Test
domain.getSObjectsByIdField(Account.Id); domain.getSObjectsByIdField(Account.Id);
domain.getSObjectByStringField(Account.Name); domain.getSObjectByStringField(Account.Name);
domain.getSObjectsByStringField(Account.Name); domain.getSObjectsByStringField(Account.Name);
domain.getBooleanFieldByIdField(Account.IsDeleted, Account.Id);
domain.getStringFieldByStringField(Account.Name, Account.AccountNumber); domain.getStringFieldByStringField(Account.Name, Account.AccountNumber);
domain.getStringFieldValues(Account.Name, criteria); domain.getStringFieldValues(Account.Name, criteria);
domain.stripInaccessibleFields(); domain.stripInaccessibleFields();
@@ -308,7 +309,7 @@ private class fflib_SObjects2Test
final Account record = new Account(Id = accountId, AnnualRevenue = 123.45); final Account record = new Account(Id = accountId, AnnualRevenue = 123.45);
fflib_SObjects2 domain = new fflib_SObjects2(new List<Account>{ record }); fflib_SObjects2 domain = new fflib_SObjects2(new List<Account>{ record });
System.Test.startTest(); System.Test.startTest();
Map<Id, Decimal> result = domain.getDecimalById(Schema.Account.AnnualRevenue, Schema.Account.Id); domain.getDecimalById(Schema.Account.AnnualRevenue, Schema.Account.Id);
System.Test.stopTest(); System.Test.stopTest();
} }
@@ -366,7 +367,7 @@ private class fflib_SObjects2Test
System.Test.stopTest(); System.Test.stopTest();
System.Assert.areEqual(1, result.size(), 'Incorrect returned amount of results'); System.Assert.areEqual(1, result.size(), 'Incorrect returned amount of results');
System.Assert.istrue(result.keySet().contains(accountId), 'The accountId is missing from the results'); System.Assert.isTrue(result.keySet().contains(accountId), 'The accountId is missing from the results');
System.Assert.areEqual(today, result.get(accountId), 'Incorrect returned date'); System.Assert.areEqual(today, result.get(accountId), 'Incorrect returned date');
} }
@@ -394,11 +395,11 @@ private class fflib_SObjects2Test
System.Test.stopTest(); System.Test.stopTest();
System.Assert.areEqual(2, result.size(), 'Incorrect amount of results'); System.Assert.areEqual(2, result.size(), 'Incorrect amount of results');
System.Assert.istrue(result.contains(numberOfEmployees), 'The expected numberOfEmployees was not returned'); System.Assert.isTrue(result.contains(numberOfEmployees), 'The expected numberOfEmployees was not returned');
System.Assert.istrue(result.contains(numberOfEmployees * 2), 'The expected numberOfEmployees was not returned'); System.Assert.isTrue(result.contains(numberOfEmployees * 2), 'The expected numberOfEmployees was not returned');
System.Assert.areEqual(1, result2.size(), 'Incorrect amount of results'); System.Assert.areEqual(1, result2.size(), 'Incorrect amount of results');
System.Assert.istrue(result2.contains(numberOfEmployees * 2), 'The expected numberOfEmployees was not returned'); System.Assert.isTrue(result2.contains(numberOfEmployees * 2), 'The expected numberOfEmployees was not returned');
} }
@IsTest @IsTest
@@ -425,11 +426,11 @@ private class fflib_SObjects2Test
System.Test.stopTest(); System.Test.stopTest();
System.Assert.areEqual(2, result.size(), 'Incorrect amount of results'); System.Assert.areEqual(2, result.size(), 'Incorrect amount of results');
System.Assert.istrue(result.contains(numberOfEmployees), 'The expected numberOfEmployees was not returned'); System.Assert.isTrue(result.contains(numberOfEmployees), 'The expected numberOfEmployees was not returned');
System.Assert.istrue(result.contains(numberOfEmployees * 2), 'The expected numberOfEmployees was not returned'); System.Assert.isTrue(result.contains(numberOfEmployees * 2), 'The expected numberOfEmployees was not returned');
System.Assert.areEqual(1, result2.size(), 'Incorrect amount of results'); System.Assert.areEqual(1, result2.size(), 'Incorrect amount of results');
System.Assert.istrue(result2.contains(numberOfEmployees * 2), 'The expected numberOfEmployees was not returned'); System.Assert.isTrue(result2.contains(numberOfEmployees * 2), 'The expected numberOfEmployees was not returned');
} }
@IsTest @IsTest
@@ -442,7 +443,7 @@ private class fflib_SObjects2Test
System.Test.startTest(); System.Test.startTest();
Map<Id, Id> accountIdByContactId = domain.getIdFieldByIdField(Schema.Contact.AccountId, Schema.Contact.Id); Map<Id, Id> accountIdByContactId = domain.getIdFieldByIdField(Schema.Contact.AccountId, Schema.Contact.Id);
System.Test.stopTest(); System.Test.stopTest();
System.Assert.istrue(accountIdByContactId.containsKey(contactId)); System.Assert.isTrue(accountIdByContactId.containsKey(contactId));
System.Assert.areEqual(accountId, accountIdByContactId.get(contactId)); System.Assert.areEqual(accountId, accountIdByContactId.get(contactId));
} }
@@ -464,7 +465,7 @@ private class fflib_SObjects2Test
); );
Set<Id> recordIds = new Set<Id> {idA, idB, idC}; Set<Id> recordIds = new Set<Id> {idA, idB, idC};
System.Assert.istrue( System.Assert.isTrue(
domain.getSObjectById().keySet().containsAll(recordIds), domain.getSObjectById().keySet().containsAll(recordIds),
'The domain should return all the record Ids' 'The domain should return all the record Ids'
); );
@@ -488,7 +489,7 @@ private class fflib_SObjects2Test
); );
Set<Id> recordIds = new Set<Id> {idA, idB, idC}; Set<Id> recordIds = new Set<Id> {idA, idB, idC};
System.Assert.istrue( System.Assert.isTrue(
domain.getRecordIds().containsAll(recordIds), domain.getRecordIds().containsAll(recordIds),
'The domain should return all the record Ids' 'The domain should return all the record Ids'
); );
@@ -742,7 +743,7 @@ private class fflib_SObjects2Test
public List<Account> selectByShippingCountry(String country) public List<Account> selectByShippingCountry(String country)
{ {
return (List<Account>) getRecordsByFieldValues( return getRecordsByFieldValues(
Schema.Account.ShippingCountry, Schema.Account.ShippingCountry,
new Set<Object> {country} new Set<Object> {country}
); );
@@ -750,7 +751,7 @@ private class fflib_SObjects2Test
public List<Account> selectByRating(String rating) public List<Account> selectByRating(String rating)
{ {
return (List<Account>) getRecordsByFieldValue( return getRecordsByFieldValue(
Schema.Account.Rating, Schema.Account.Rating,
rating rating
); );
@@ -758,21 +759,21 @@ private class fflib_SObjects2Test
public List<Account> selectWithoutShippingCountry() public List<Account> selectWithoutShippingCountry()
{ {
return (List<Account>) getRecordsWithBlankFieldValues( return getRecordsWithBlankFieldValues(
Schema.Account.ShippingCountry Schema.Account.ShippingCountry
); );
} }
public List<Account> selectWithShippingCountry() public List<Account> selectWithShippingCountry()
{ {
return (List<Account>) getRecordsWithNotBlankFieldValues( return getRecordsWithNotBlankFieldValues(
Schema.Account.ShippingCountry Schema.Account.ShippingCountry
); );
} }
public List<Account> selectWithEmptyRecord() public List<Account> selectWithEmptyRecord()
{ {
return (List<Account>) getRecordsWithAllBlankFieldValues( return getRecordsWithAllBlankFieldValues(
new Set<Schema.SObjectField> new Set<Schema.SObjectField>
{ {
Schema.Account.Name, Schema.Account.Name,
@@ -783,7 +784,7 @@ private class fflib_SObjects2Test
public List<Account> selectPopulatedRecords() public List<Account> selectPopulatedRecords()
{ {
return (List<Account>) getRecordsWithAllNotBlankFieldValues( return getRecordsWithAllNotBlankFieldValues(
new Set<Schema.SObjectField> new Set<Schema.SObjectField>
{ {
Schema.Account.Name, Schema.Account.Name,
@@ -805,11 +806,6 @@ private class fflib_SObjects2Test
ratingByCountry); ratingByCountry);
} }
public void addNameError(String message)
{
addError(Schema.Account.Name, message);
}
public void clearShippingCountry() public void clearShippingCountry()
{ {
clearField(Schema.Account.ShippingCountry); clearField(Schema.Account.ShippingCountry);