From ad75a9b79030c51a1d35b9b9de601a8b448d0b3a Mon Sep 17 00:00:00 2001 From: WimVelzeboer Date: Wed, 16 Mar 2022 21:16:25 +0000 Subject: [PATCH] Add Factory method for records based on an Id field Signed-off-by: WimVelzeboer --- .../factories/fflib_SObjectFactory.cls | 13 ++++++ .../factories/fflib_SObjectFactoryTest.cls | 44 +++++++++++++++---- 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/sfdx-source/apex-extensions/main/default/classes/factories/fflib_SObjectFactory.cls b/sfdx-source/apex-extensions/main/default/classes/factories/fflib_SObjectFactory.cls index e3f41ba..5e2f5c0 100644 --- a/sfdx-source/apex-extensions/main/default/classes/factories/fflib_SObjectFactory.cls +++ b/sfdx-source/apex-extensions/main/default/classes/factories/fflib_SObjectFactory.cls @@ -40,5 +40,18 @@ public abstract inherited sharing class fflib_SObjectFactory implements fflib_IS return result; } + public virtual List generateSObjectByIdField(Schema.SObjectField sObjectField, Set ids) + { + SObjectType sObjectType = getSObjectType(); + List result = new List(); + for (Id recordId : ids) + { + SObject newSObject = sObjectType.newSObject(); + newSObject.put(sObjectField, recordId); + result.add(newSObject); + } + return result; + } + abstract Schema.SObjectType getSObjectType(); } \ No newline at end of file diff --git a/sfdx-source/apex-extensions/tests/classes/factories/fflib_SObjectFactoryTest.cls b/sfdx-source/apex-extensions/tests/classes/factories/fflib_SObjectFactoryTest.cls index 9012505..27e2757 100644 --- a/sfdx-source/apex-extensions/tests/classes/factories/fflib_SObjectFactoryTest.cls +++ b/sfdx-source/apex-extensions/tests/classes/factories/fflib_SObjectFactoryTest.cls @@ -32,7 +32,26 @@ private class fflib_SObjectFactoryTest { @IsTest - static void itShouldGenerateAccountRecords() + static void itShouldGenerateContactRecords() + { + // GIVEN a set of Ids + final Set ids = new Set + { + fflib_IDGenerator.generate(Schema.Contact.SObjectType), + fflib_IDGenerator.generate(Schema.Contact.SObjectType), + fflib_IDGenerator.generate(Schema.Contact.SObjectType) + }; + + // WHEN we generate Contact records + List result = (List) new ContactsFactory().generateById(ids); + + // THEN there should be three Contact records + System.assertEquals(3, result.size(), 'Not enough records created'); + System.assert(new Map(result).keySet().containsAll(ids), 'Records should contain the given ids'); + } + + @IsTest + static void itShouldGenerateContactRecordsWithAccountId() { // GIVEN a set of Ids final Set ids = new Set @@ -42,24 +61,31 @@ private class fflib_SObjectFactoryTest fflib_IDGenerator.generate(Schema.Account.SObjectType) }; - // WHEN we generate Account records - List result = (List) new AccountsFactory().generateById(ids); + // WHEN we generate Contact records + List result = (List) new ContactsFactory().generateByAccountId(ids); - // THEN there should be three Account records + // THEN there should be three Contact records System.assertEquals(3, result.size(), 'Not enough records created'); - System.assert(new Map(result).keySet().containsAll(ids), 'Records should contain the given ids'); + Set accountIds = new Set(); + for (Contact record : result) accountIds.add(record.AccountId); + System.assert(accountIds.containsAll(ids), 'Records should contain the given ids'); } - private class AccountsFactory extends fflib_SObjectFactory + private class ContactsFactory extends fflib_SObjectFactory { - public List generateById(Set accountIds) + public List generateById(Set ContactIds) { - return (List) generateSObjectById(accountIds); + return (List) generateSObjectById(ContactIds); + } + + public List generateByAccountId(Set ContactIds) + { + return (List) generateSObjectByIdField(Schema.Contact.AccountId, ContactIds); } public SObjectType getSObjectType() { - return Schema.Account.SObjectType; + return Schema.Contact.SObjectType; } } } \ No newline at end of file