Guest User

Untitled

a guest
Jan 10th, 2019
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.36 KB | None | 0 0
  1. @isTest
  2. private class SandboxPostRefreshTestCase {
  3.  
  4. static Testmethod void testSandboxPostCopyScript() {
  5.  
  6. Account accVar = new Account();
  7. accVar.Name ='Account Test';
  8. INSERT accVar;
  9.  
  10. Contact conVar = new Contact();
  11. conVar.LastName ='Contact Test';
  12. conVar.AccountId =accVar.Id;
  13. conVar.Email = 'test@gmail.com';
  14. conVar.Other_Email__c = 'testother@gmail.com';
  15. INSERT conVar;
  16.  
  17. Case casVar = new Case();
  18. casVar.Origin ='Email';
  19. casVar.Status = 'New';
  20. // casVar.ContactEmail = 'test@gmail.com';
  21. casVar.SuppliedEmail = 'testother@gmail.com';
  22. INSERT casVar;
  23.  
  24. Campaign camVar = new Campaign();
  25. camVar.Name ='test';
  26. INSERT camVar;
  27.  
  28. CampaignMember newMemberVar = new CampaignMember();
  29. newMemberVar.CampaignId = camVar.Id;
  30. newMemberVar.ContactId = conVar.Id;
  31. // newMember.Email = 'test@gmail.com';
  32. INSERT newMemberVar;
  33.  
  34. Lead leadVar = new Lead();
  35. leadVar.LastName = 'testsds';
  36. leadVar.Status = 'New';
  37. leadVar.Company = 'test';
  38. leadVar.Email = 'test@gmail.com';
  39. INSERT leadVar;
  40.  
  41. Opportunity oppVar = new Opportunity();
  42. oppVar.Name = 'testsds';
  43. oppVar.AccountId = accVar.Id;
  44. oppVar.CloseDate = date.today();
  45. oppVar.StageName = 'Proposal';
  46. INSERT oppVar;
  47.  
  48. Quote quoteVar = new Quote();
  49. quoteVar.Name = 'testsds';
  50. // quoteVar.Account = accVar.Id;
  51. quoteVar.OpportunityId = oppVar.Id;
  52.  
  53.  
  54.  
  55. Test.startTest();
  56.  
  57. PrepareSandboxPostCopy_Batch obj = new PrepareSandboxPostCopy_Batch();
  58. PrepareSandboxPostCopy_Batch.executeBatch();
  59. // system.assertEquals(true, PrepareSandboxPostCopy_Batch.isSandbox());
  60.  
  61. Test.stopTest();
  62.  
  63. }
  64. }
  65.  
  66. global class PrepareSandboxPostCopy_Batch implements Database.Batchable<sObject> {
  67.  
  68. String query;
  69. String sObjectName;
  70. Map <String, List <String>> sObjectEmaiLFieldsMap = new Map <String, List <String>>();
  71.  
  72. //Call this method from the class that implements the SandboxPostCopy Interface or from Developer console
  73. global static void executeBatch() {
  74. Map <String, List <String>> sObjectEmaiLFieldsMap = getsObjectEmaiLFields();
  75.  
  76. if(!sObjectEmaiLFieldsMap.isEmpty()) {
  77. Database.executeBatch(new PrepareSandboxPostCopy_Batch(sObjectEmaiLFieldsMap));
  78. }
  79. }
  80.  
  81. /** BATCHABLE INTERFACE IMPLEMENTATION STARTS **/
  82. global PrepareSandboxPostCopy_Batch(Map <String, List <String>> sObjectFieldsMap) {
  83. //Get First Key In Map
  84. sObjectName = new List<String> (sObjectFieldsMap.keySet()).get(0);
  85.  
  86. sObjectEmaiLFieldsMap = sObjectFieldsMap;
  87. query = getSOQLString(sObjectName, sObjectEmaiLFieldsMap.get(sObjectName));
  88. }
  89.  
  90. global Database.QueryLocator start(Database.BatchableContext BC) {
  91. return Database.getQueryLocator(query);
  92. }
  93.  
  94. global void execute(Database.BatchableContext BC, List<sObject> scope) {
  95.  
  96. for(sObject thisRecord : scope) {
  97. for(String thisField : sObjectEmaiLFieldsMap.get(sObjectName)) {
  98. String email = (String) thisRecord.get(thisField);
  99. if(String.isEmpty(email) || email.contains('.invalid') || email.contains('.noemail')) continue; //If empty or if contains .invalid then do not update
  100. thisRecord.put(thisField, email + '.invalid'); //Append invalid to the email
  101. }
  102. }
  103. Database.update(scope, false); //allow partial success
  104. }
  105.  
  106. global void finish(Database.BatchableContext BC) {
  107. //Remove the sObject (First Key) once the records for the sObject processed successfully
  108. sObjectEmaiLFieldsMap.remove(sObjectName);
  109. executeBatch(sObjectEmaiLFieldsMap);
  110. }
  111. /** BATCHABLE INTERFACE IMPLEMENTATION ENDS **/
  112.  
  113. public static Boolean isSandbox() {
  114. return [SELECT IsSandbox FROM Organization WHERE Id =: UserInfo.getOrganizationId()].IsSandbox;
  115. }
  116.  
  117. private static void executeBatch(Map <String, List <String>> sObjectFieldsMap) {
  118. if(!sObjectFieldsMap.isEmpty()) {
  119. Database.executeBatch(new PrepareSandboxPostCopy_Batch(sObjectFieldsMap));
  120. }
  121. }
  122.  
  123. private static String getSOQLString(String sObjectName, List<String> sObjectFields) {
  124.  
  125. String soqlQuery = 'SELECT {!sObjectFields} FROM {!objectTypeName} WHERE {!conditionals}';
  126.  
  127. List<String> conditionals = new List <String>();
  128. for (String thisField: sObjectFields) {
  129. conditionals.add(thisField + ' != NULL');
  130. }
  131.  
  132. soqlQuery = soqlQuery.replace('{!sObjectFields}', String.join(sObjectFields, ' ,'));
  133. soqlQuery = soqlQuery.replace('{!objectTypeName}', sObjectName);
  134. soqlQuery = soqlQuery.replace('{!conditionals}', String.join(conditionals, ' OR '));
  135.  
  136. if(!isSandbox()) soqlQuery = soqlQuery + ' LIMIT 0'; //For Non Sandbox (Production) Instance Do Not Update Records
  137.  
  138. return soqlQuery;
  139. }
  140.  
  141. //Get all Queryable Objects and it's email fields
  142. private static Map <String, List <String>> getsObjectEmaiLFields() {
  143.  
  144. Map <String, List <String>> sObjectEmailFieldMap = new Map <String, List <String>>();
  145.  
  146. //Only pass the selected object, dynamically getting all objects may exceed APEX CPU Limit
  147. List<SObjectType> sObjectsToUpdate = new List<SObjectType>{ Account.SObjectType,
  148. Contact.SObjectType,
  149. Case.SObjectType,
  150. CampaignMember.SObjectType,
  151. Lead.SObjectType,
  152. Opportunity.SObjectType,
  153. Quote.SObjectType };
  154.  
  155. for(SObjectType sObjectType : sObjectsToUpdate) {
  156.  
  157. //Describe sObject
  158. DescribeSObjectResult sObjectDescribe = sObjectType.getDescribe();
  159.  
  160. String objectTypeName = sObjectDescribe.getName();
  161.  
  162. //Skip objects we cannot query or update
  163. if(!sObjectDescribe.isQueryable() || !sObjectDescribe.isUpdateable()) continue;
  164.  
  165. for(SObjectField sObjectField: sObjectDescribe.fields.getMap().values()) {
  166.  
  167. DescribeFieldResult thisField = sObjectField.getDescribe();
  168.  
  169. //Skip all non email fields
  170. if(thisField.getType() != Schema.DisplayType.EMAIL || !thisField.isFilterable() || !thisField.isUpdateable()) continue;
  171.  
  172. if(sObjectEmailFieldMap.containsKey(objectTypeName)) {
  173. sObjectEmailFieldMap.get(objectTypeName).add(thisField.getName());
  174. }
  175. else {
  176. sObjectEmailFieldMap.put(objectTypeName, new List <String> {thisField.getName()});
  177. }
  178. }
  179. }
  180. return sObjectEmailFieldMap;
  181. }
  182. }
  183.  
  184. Test.startTest();
  185.  
  186. Map<String, List<String>> sObjectFieldsMap = new Map<String, List<String>>();
  187. sObjectFieldsMap.put('Account', new List<String>{'Name, BillingCity'}); //Add valid sObject and fields for code coverage
  188. PrepareSandboxPostCopy_Batch obj = new PrepareSandboxPostCopy_Batch(sObjectFieldsMap);
  189. PrepareSandboxPostCopy_Batch.executeBatch();
  190.  
  191. Test.stopTest();
Add Comment
Please, Sign In to add comment