A collection of apex classes and useful pieces of code to simplify and/or jumpstart my (and your) code.
Use CustomLabelUtils to get custom label translations to the running user's
language with
CustomLabelUtils.getCurrentUserTranslation(labelName)If the label is in a namespace, instead use
CustomLabelUtils.getCurrentUserTranslation(labelName, namespace)DataWeaveTransforms contains static methods to transform data using the
scripts found in force-app/main/default/dw. e.g.: to transform a csv string
into a JSON encoded object, call
DataWeaveTransforms.csvToJson(csvString)This returns an array of JSON objects which map to the csv rows.
Contains an interface to implement Callable classes to use in Omnistudio
Integration Procedures, by having a single entry point in IPRemoteSelector and
a custom metadata type to select the appropriate action.
Mocks to use while testing apex.
For example, HttpCalloutMockImpl is a virtual
class that allows to queue multiple responses for when a unit test performs
multiple callouts and different responses are needed. This can be implemented as
HttpResponse response_1 = new HttpResponse();
HttpResponse response_2 = new HttpResponse();
HttpCalloutMock mock = new HttpCalloutMockImpl()
.setResponses(
new List<HttpResponse>{response_1, response_2}
);
Test.setMock(HttpCalloutMock.class, mock);Also, a single new response can be added to the response queue by using
mock.addResponse(new HttpResponse());If the mock needs to do anything with the received HttpRequest, an extending
class can override processRequest(request) to perform any additional actions.
Provides an abstract class used to create test records during apex unit tests in
a reusable, clearer, and more verbose way, without the need to create huge TestDataFactory
classes that attempt to do too much. Classes can extend TestSObjectFactory and
just implement getType and getDefaults to set the SObjectType of records
to create, and some default field values. As an example TestAccountFactory can
be used to create test accounts such as
List<Account> testAccounts = (List<Account>) new TestAccountFactory().create(10);Records can be created using a Record Type by passing the RT's DeveloperName
as
List<Account> testAccountsWithRT = (List<Account>) new TestAccountFactory()
.withRecordType('Some_Record_Type')
.create(5);Field values (aside from default ones defined in the factory) can be set like
List<Account> testAccountsWithValues = (List<Account>) new TestAccountFactory()
.withFieldValues(
new Map<SObjectField, Object>{
Account.Industry => 'Engineering',
Account.NumberOfEmployees => 150
}
).create(3);Default values can be bypassed by using .withoutDefaults(). A single record can
be created using .createSingle() instead of .create(n), which also returns a
single sObject.
If multiple records need to be created with different values for a same field, a
list of values can be passed in the .withFieldValues map, like so
List<Account> differentFieldValues = (List<Account>) new TestAccountFactory()
.withFieldValues(
new Map<SObjectField, Object>{
Account.Website => new List<Object>{'https://www.github.com', 'https://www.salesforce.com'}
}
).create(2);Each passed list must contain at least as many values as records to create.
Finally, for any lookup fields, an sObject can be passed instead of having to
reference the Id field directly:
List<Account> accs = (List<Account>) new TestAccountFactory().create(10);
List<Contact> conts = (List<Contact>) new TestContactFactory().withFieldValues(
new Map<SObjectField, Object> {
Contact.AccountId => accs
}
).create(10);If using multiple TestSObjectFactory extensions, TestFactorySelector can be
used to provide a single entry point from which to instantiate all factories by
using an enum to reference them instead.