Add method overload for adding multiple read-only fields at once.

This commit is contained in:
wim
2022-09-23 15:38:57 +02:00
parent 4aef8f34f9
commit f3d5ebef96
@@ -64,6 +64,23 @@ public with sharing class fflib_MockSObjectUtil
return (SObject) JSON.deserialize(serializedRecord, SObject.class); return (SObject) JSON.deserialize(serializedRecord, SObject.class);
} }
@TestVisible
private static SObject setFieldValue(
SObject record,
Map<Schema.SObjectField, Object> valueBySObjectField)
{
String serializedRecord = JSON.serialize(record);
Map<String, Object> valuesByFieldName =
(Map<String, Object>) JSON.deserializeUntyped(serializedRecord);
for (SObjectField fieldToken : valueBySObjectField.keySet())
{
String fieldName = fieldToken.getDescribe().getName();
valuesByFieldName.put(fieldName, valueBySObjectField.get(fieldToken));
}
serializedRecord = JSON.serialize(valuesByFieldName);
return (SObject) JSON.deserialize(serializedRecord, SObject.class);
}
@IsTest @IsTest
static void itShouldTestAddingReadOnlyField() static void itShouldTestAddingReadOnlyField()
{ {
@@ -73,6 +90,20 @@ public with sharing class fflib_MockSObjectUtil
System.assertEquals(amount, result.get(Opportunity.ExpectedRevenue)); System.assertEquals(amount, result.get(Opportunity.ExpectedRevenue));
} }
@IsTest
static void itShouldTestAddingManyReadOnlyFields()
{
final Decimal amount = 10.0;
Opportunity opp = new Opportunity(Id = fflib_IDGenerator.generate(Schema.Opportunity.SObjectType));
Opportunity result = (Opportunity) setFieldValue(
(SObject) opp,
new Map<Schema.SObjectField, Object>
{
Opportunity.ExpectedRevenue => amount
});
System.assertEquals(amount, result.get(Opportunity.ExpectedRevenue));
}
@IsTest @IsTest
static void itShouldTestSettingDateField() static void itShouldTestSettingDateField()
{ {