From f3d5ebef964611713b5e19774dec6fc0f871eddc Mon Sep 17 00:00:00 2001 From: wimvelzeboer Date: Fri, 23 Sep 2022 15:38:57 +0200 Subject: [PATCH] Add method overload for adding multiple read-only fields at once. --- .../classes/utils/fflib_MockSObjectUtil.cls | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/sfdx-source/apex-extensions/main/default/classes/utils/fflib_MockSObjectUtil.cls b/sfdx-source/apex-extensions/main/default/classes/utils/fflib_MockSObjectUtil.cls index 0240cb4..e3d089b 100644 --- a/sfdx-source/apex-extensions/main/default/classes/utils/fflib_MockSObjectUtil.cls +++ b/sfdx-source/apex-extensions/main/default/classes/utils/fflib_MockSObjectUtil.cls @@ -64,6 +64,23 @@ public with sharing class fflib_MockSObjectUtil return (SObject) JSON.deserialize(serializedRecord, SObject.class); } + @TestVisible + private static SObject setFieldValue( + SObject record, + Map valueBySObjectField) + { + String serializedRecord = JSON.serialize(record); + Map valuesByFieldName = + (Map) 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 static void itShouldTestAddingReadOnlyField() { @@ -73,6 +90,20 @@ public with sharing class fflib_MockSObjectUtil 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 + { + Opportunity.ExpectedRevenue => amount + }); + System.assertEquals(amount, result.get(Opportunity.ExpectedRevenue)); + } + @IsTest static void itShouldTestSettingDateField() {