/
ClassFactory.cls
39 lines (32 loc) · 1.26 KB
/
ClassFactory.cls
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
* Inspired by https://github.dev/apex-enterprise-patterns/fflib-apex-common
*/
public inherited sharing virtual class ClassFactory {
private static Map<Type, Object> interfaceToMockImplementation = new Map<Type, Object>();
private static List<SObjectType> objectDependencyOrder = new List<SObjectType>{
Lead.SObjectType,
Account.SObjectType,
Contact.SObjectType
};
public static Object newInstance(Type requestedType) {
// Mock implementation?
if (interfaceToMockImplementation.containsKey(requestedType)) {
return interfaceToMockImplementation.get(requestedType);
}
return requestedType.newInstance();
}
public static fflib_ISObjectUnitOfWork newUnitOfWorkInstance() {
return newUnitOfWorkInstance(objectDependencyOrder);
}
public static fflib_ISObjectUnitOfWork newUnitOfWorkInstance(List<SObjectType> sObjectList) {
// Mock implementation?
if (interfaceToMockImplementation.containsKey(fflib_ISObjectUnitOfWork.class)) {
return (fflib_ISObjectUnitOfWork) interfaceToMockImplementation.get(fflib_ISObjectUnitOfWork.class);
}
return new UnitOfWork(sObjectList);
}
@TestVisible
private static void setMock(Type interfaceType, Object mockImplementation) {
interfaceToMockImplementation.put(interfaceType, mockImplementation);
}
}