You need to sign in to do that
Don't have an account?
Praveen Yadavalli 17
Code Coverage for Callout
I have a callout in salesforce which is used to call the other systems to get the data or send data through continuous integration butthe problem here is when coming to test class i am getting only 61percent of coverage since its not covering the methods used in callout because i use only one method in the trigger handler its covering fine
Here is the callout code --
public class ZuoraBillingAccountTriggerHandler {
// SF-2177
public static void QueueRetrieveZuoraAccountSoldToInfoQueuedJob() {
// if another job is already queued don't do anything, otherwise queue another job
List<AsyncApexJob> jobList = [SELECT Id, Status, ApexClass.Name FROM AsyncApexJob WHERE ApexClass.Name = 'RetrieveZuoraAccountSoldToInfoQueuedJob' AND (Status = 'Holding' OR Status = 'Queued' OR Status = 'Preparing' OR Status = 'Processing') LIMIT 1];
if (jobList.isEmpty() && !Test.isRunningTest()) {
System.enqueueJob(new RetrieveZuoraAccountSoldToInfoQueuedJob.QueueableOne());
}
}
// SF-2177
public static void ModifyNeedToUpdateSoldToContactCheckboxesAndQueueJob(List<Zuora__CustomerAccount__c> newList, Map<Id, Zuora__CustomerAccount__c> oldMap) {
Boolean queueTheJob = False;
for (Zuora__CustomerAccount__c newZCA : newList) {
Zuora__CustomerAccount__c oldZCA = oldMap.get(newZCA.Id);
// CSP-878 if Amount_Past_Due__c changed, set "queue Job" to false
if(oldZCA != null && newZCA.Amount_Past_Due__c != oldZCA.Amount_Past_Due__c){
}
// if checkbox was selected and is being unchecked, don't do anything; otherwise, check the box and set the "queue job" flag to true
// also, due to the high number of updates occurring as part of the UpdateZuoraAccountCBSSQueuedJob, DO NOT select the checkbox under that circumstance
else if (oldZCA != null && !oldZCA.NeedToUpdateSoldToContact__c && !newZCA.NeedToUpdateSoldToContact__c && (newZCA.CBSS_Name__c == oldZCA.CBSS_Name__c && newZCA.CBSS_SalesRepId__c == oldZCA.CBSS_SalesRepId__c)) {
newZCA.NeedToUpdateSoldToContact__c = True;
if (!queueTheJob) {
queueTheJob = True;
}
}
// also, if the checkbox was already selected set the "queue job" flag to true, just to be safe
else if (newZCA.NeedToUpdateSoldToContact__c && !queueTheJob) {
queueTheJob = True;
}
}
if (queueTheJob) {
QueueRetrieveZuoraAccountSoldToInfoQueuedJob();
}
}
public static void updateZouraFields(List<Zuora__CustomerAccount__c> newList, Map<Id, Zuora__CustomerAccount__c> oldMap) {
List<Zuora.zObject> zuoraZObjectList = new List<Zuora.zObject>();
Set<String> contactIds = new Set<String>();
Set<String> billingIds = new Set<String>();
for(Zuora__CustomerAccount__c newZCA : newList){
Zuora__CustomerAccount__c oldZCA = oldMap.get(newZCA.Id);
if(oldZCA != null && newZCA.name != oldZCA.name){
billingIds.add(newZCA.Zuora__Zuora_Id__c);
}
if(oldZCA != null && (newZCA.Zuora__BillToWorkPhone__c != oldZCA.Zuora__BillToWorkPhone__c ||
newZCA.Zuora__BillToName__c != oldZCA.Zuora__BillToName__c ||
newZCA.Zuora__BillToWorkEmail__c != oldZCA.Zuora__BillToWorkEmail__c ||
newZCA.Zuora__BillToAddress1__c != oldZCA.Zuora__BillToAddress1__c ||
newZCA.Zuora__BillToAddress2__c != oldZCA.Zuora__BillToAddress2__c ||
newZCA.Zuora__BillToCity__c != oldZCA.Zuora__BillToCity__c ||
newZCA.Zuora__BillToState__c != oldZCA.Zuora__BillToState__c ||
newZCA.Zuora__BillToPostalCode__c != oldZCA.Zuora__BillToPostalCode__c ||
newZCA.Zuora__BillToCountry__c != oldZCA.Zuora__BillToCountry__c)){
/*Zuora.zObject acc = new Zuora.zObject('Contact');
acc.setValue('Id', newZCA.Zuora__BillToId__c);
acc.setValue('WorkPhone', String.isNotBlank(newZCA.Zuora__BillToWorkPhone__c) ? newZCA.Zuora__BillToWorkPhone__c : '');
*/
contactIds.add(newZCA.Zuora__BillToId__c);
//contactIds.add(newZCA.Zuora__SoldToId__c);
}
}
if(!(System.isFuture() || System.isBatch())){
if(contactIds.size() > 0){
ZuoraBillingAccountTriggerHandler.zouraUpdate(contactIds);
}
if(billingIds.size() > 0){
ZuoraBillingAccountTriggerHandler.zouraBillingAccountUpdate(billingIds);
}
}
}
@future(callout=true)
public static void zouraUpdate(Set<String> contactIds){
List<Zuora.zObject> zuoraZObjectList = new List<Zuora.zObject>();
for(Zuora__CustomerAccount__c newZCA : [select id,name,Zuora__BillToWorkPhone__c,Zuora__SoldToId__c,Zuora__Zuora_Id__c,Zuora__BillToId__c,Zuora__BillToName__c,
Zuora__BillToAddress1__c,Zuora__BillToAddress2__c,Zuora__BillToCity__c,Zuora__BillToState__c,Zuora__BillToPostalCode__c,Zuora__BillToCountry__c,
Zuora__BillToWorkEmail__c from Zuora__CustomerAccount__c where Zuora__BillToId__c IN :contactIds] ){
if (!Test.isRunningTest()) {
Zuora.zObject acc = new Zuora.zObject('Contact');
acc.setValue('Id', newZCA.Zuora__BillToId__c);
List<String> nameSplit = newZCA.Zuora__BillToName__c.split(' ');
acc.setValue('FirstName', String.isNotBlank(newZCA.Zuora__BillToName__c) ? newZCA.Zuora__BillToName__c : '');
acc.setValue('LastName', String.isNotBlank(newZCA.Zuora__BillToName__c) ? newZCA.Zuora__BillToName__c : '');
if(nameSplit.size() == 2){
acc.setValue('FirstName', nameSplit[0]);
acc.setValue('LastName', nameSplit[1]);
}
acc.setValue('Address1', String.isNotBlank(newZCA.Zuora__BillToAddress1__c) ? newZCA.Zuora__BillToAddress1__c : '');
acc.setValue('Address2', String.isNotBlank(newZCA.Zuora__BillToAddress2__c) ? newZCA.Zuora__BillToAddress2__c : '');
acc.setValue('City', String.isNotBlank(newZCA.Zuora__BillToCity__c) ? newZCA.Zuora__BillToCity__c : '');
acc.setValue('State', String.isNotBlank(newZCA.Zuora__BillToState__c) ? newZCA.Zuora__BillToState__c : '');
acc.setValue('PostalCode', String.isNotBlank(newZCA.Zuora__BillToPostalCode__c) ? newZCA.Zuora__BillToPostalCode__c : '');
acc.setValue('Country', String.isNotBlank(newZCA.Zuora__BillToCountry__c) ? newZCA.Zuora__BillToCountry__c : '');
acc.setValue('WorkEmail', String.isNotBlank(newZCA.Zuora__BillToWorkEmail__c) ? newZCA.Zuora__BillToWorkEmail__c : '');
acc.setValue('WorkPhone', String.isNotBlank(newZCA.Zuora__BillToWorkPhone__c) ? newZCA.Zuora__BillToWorkPhone__c : '');
zuoraZObjectList.add(acc);
}
}
/*for(Zuora__CustomerAccount__c newZCA : [select id,name,Zuora__BillToWorkPhone__c,Zuora__SoldToId__c,Zuora__Zuora_Id__c,Zuora__BillToId__c,Zuora__BillToName__c,
Zuora__BillToAddress1__c,Zuora__BillToAddress2__c,Zuora__BillToCity__c,Zuora__BillToState__c,Zuora__BillToPostalCode__c,Zuora__BillToCountry__c,
Zuora__BillToWorkEmail__c from Zuora__CustomerAccount__c where Zuora__BillToId__c IN :contactIds] ){
Zuora.zObject acc = new Zuora.zObject('Contact');
acc.setValue('Id', newZCA.Zuora__SoldToId__c);
List<String> nameSplit = newZCA.Zuora__BillToName__c.split(' ');
acc.setValue('FirstName', newZCA.Zuora__BillToName__c);
acc.setValue('LastName', newZCA.Zuora__BillToName__c);
if(nameSplit.size() == 2){
acc.setValue('FirstName', nameSplit[0]);
acc.setValue('LastName', nameSplit[1]);
}
acc.setValue('Address1', newZCA.Zuora__BillToAddress1__c);
acc.setValue('Address2', newZCA.Zuora__BillToAddress2__c);
acc.setValue('City', newZCA.Zuora__BillToCity__c);
acc.setValue('State', newZCA.Zuora__BillToState__c);
acc.setValue('PostalCode', newZCA.Zuora__BillToPostalCode__c);
acc.setValue('Country', newZCA.Zuora__BillToCountry__c);
acc.setValue('WorkEmail', newZCA.Zuora__BillToWorkEmail__c);
acc.setValue('WorkPhone', newZCA.Zuora__BillToWorkPhone__c);
zuoraZObjectList.add(acc);
}*/
Zuora.ZApi zApiInstance = new Zuora.ZApi();
if (!Test.isRunningTest()) {
Zuora.zApi.LoginResult loginResult = zApiInstance.zlogin();
}
if(!zuoraZObjectList.isEmpty()){
List<Zuora.zApi.SaveResult> results = new List<Zuora.zApi.SaveResult>();
if (!Test.isRunningTest()) {
// callout method documention is here: https://knowledgecenter.zuora.com/CA_Commerce/E_Development_Resources/B_Order_Builder/D_Programming_with_Order_Builder
results.addAll(zApiInstance.zupdate(zuoraZObjectList));
}
for (Zuora.zApi.SaveResult result : results) {
if (result.Success){
// nothing for now
}else{
//failure, get the errors
System.debug('CALLOUT FAILED');
// TODO: add error logic
/*Zuora.zObject[] errors = result.errors;
for (Zuora.zObject error : errors) {
String errorCode = (String)error.getValue('Code');
String message = (String)error.getValue('Message');
System.debug(errorCode + ' ' + message);
}*/
}
}
}
}
@future(callout=true)
public static void zouraBillingAccountUpdate(Set<String> contactIds){
List<Zuora.zObject> zuoraZObjectList = new List<Zuora.zObject>();
for(Zuora__CustomerAccount__c newZCA : [select id,name,Zuora__Zuora_Id__c from Zuora__CustomerAccount__c where Zuora__Zuora_Id__c IN :contactIds] ){
if (!Test.isRunningTest()) {
Zuora.zObject acc = new Zuora.zObject('Account');
acc.setValue('Id', newZCA.Zuora__Zuora_Id__c);
acc.setValue('Name',newZCA.Name);
zuoraZObjectList.add(acc);
}
}
Zuora.ZApi zApiInstance = new Zuora.ZApi();
if (!Test.isRunningTest()) {
Zuora.zApi.LoginResult loginResult = zApiInstance.zlogin();
}
if(!zuoraZObjectList.isEmpty()){
List<Zuora.zApi.SaveResult> results = new List<Zuora.zApi.SaveResult>();
if (!Test.isRunningTest()) {
// callout method documention is here: https://knowledgecenter.zuora.com/CA_Commerce/E_Development_Resources/B_Order_Builder/D_Programming_with_Order_Builder
results.addAll(zApiInstance.zupdate(zuoraZObjectList));
}
for (Zuora.zApi.SaveResult result : results) {
if (result.Success){
// nothing for now
}else{
//failure, get the errors
System.debug('CALLOUT FAILED');
// TODO: add error logic
/*
Zuora.zObject[] errors = result.errors;
for (Zuora.zObject error : errors) {
String errorCode = (String)error.getValue('Code');
String message = (String)error.getValue('Message');
System.debug(errorCode + ' ' + message);
}*/
}
}
}
}
}
Here is the callout code --
public class ZuoraBillingAccountTriggerHandler {
// SF-2177
public static void QueueRetrieveZuoraAccountSoldToInfoQueuedJob() {
// if another job is already queued don't do anything, otherwise queue another job
List<AsyncApexJob> jobList = [SELECT Id, Status, ApexClass.Name FROM AsyncApexJob WHERE ApexClass.Name = 'RetrieveZuoraAccountSoldToInfoQueuedJob' AND (Status = 'Holding' OR Status = 'Queued' OR Status = 'Preparing' OR Status = 'Processing') LIMIT 1];
if (jobList.isEmpty() && !Test.isRunningTest()) {
System.enqueueJob(new RetrieveZuoraAccountSoldToInfoQueuedJob.QueueableOne());
}
}
// SF-2177
public static void ModifyNeedToUpdateSoldToContactCheckboxesAndQueueJob(List<Zuora__CustomerAccount__c> newList, Map<Id, Zuora__CustomerAccount__c> oldMap) {
Boolean queueTheJob = False;
for (Zuora__CustomerAccount__c newZCA : newList) {
Zuora__CustomerAccount__c oldZCA = oldMap.get(newZCA.Id);
// CSP-878 if Amount_Past_Due__c changed, set "queue Job" to false
if(oldZCA != null && newZCA.Amount_Past_Due__c != oldZCA.Amount_Past_Due__c){
}
// if checkbox was selected and is being unchecked, don't do anything; otherwise, check the box and set the "queue job" flag to true
// also, due to the high number of updates occurring as part of the UpdateZuoraAccountCBSSQueuedJob, DO NOT select the checkbox under that circumstance
else if (oldZCA != null && !oldZCA.NeedToUpdateSoldToContact__c && !newZCA.NeedToUpdateSoldToContact__c && (newZCA.CBSS_Name__c == oldZCA.CBSS_Name__c && newZCA.CBSS_SalesRepId__c == oldZCA.CBSS_SalesRepId__c)) {
newZCA.NeedToUpdateSoldToContact__c = True;
if (!queueTheJob) {
queueTheJob = True;
}
}
// also, if the checkbox was already selected set the "queue job" flag to true, just to be safe
else if (newZCA.NeedToUpdateSoldToContact__c && !queueTheJob) {
queueTheJob = True;
}
}
if (queueTheJob) {
QueueRetrieveZuoraAccountSoldToInfoQueuedJob();
}
}
public static void updateZouraFields(List<Zuora__CustomerAccount__c> newList, Map<Id, Zuora__CustomerAccount__c> oldMap) {
List<Zuora.zObject> zuoraZObjectList = new List<Zuora.zObject>();
Set<String> contactIds = new Set<String>();
Set<String> billingIds = new Set<String>();
for(Zuora__CustomerAccount__c newZCA : newList){
Zuora__CustomerAccount__c oldZCA = oldMap.get(newZCA.Id);
if(oldZCA != null && newZCA.name != oldZCA.name){
billingIds.add(newZCA.Zuora__Zuora_Id__c);
}
if(oldZCA != null && (newZCA.Zuora__BillToWorkPhone__c != oldZCA.Zuora__BillToWorkPhone__c ||
newZCA.Zuora__BillToName__c != oldZCA.Zuora__BillToName__c ||
newZCA.Zuora__BillToWorkEmail__c != oldZCA.Zuora__BillToWorkEmail__c ||
newZCA.Zuora__BillToAddress1__c != oldZCA.Zuora__BillToAddress1__c ||
newZCA.Zuora__BillToAddress2__c != oldZCA.Zuora__BillToAddress2__c ||
newZCA.Zuora__BillToCity__c != oldZCA.Zuora__BillToCity__c ||
newZCA.Zuora__BillToState__c != oldZCA.Zuora__BillToState__c ||
newZCA.Zuora__BillToPostalCode__c != oldZCA.Zuora__BillToPostalCode__c ||
newZCA.Zuora__BillToCountry__c != oldZCA.Zuora__BillToCountry__c)){
/*Zuora.zObject acc = new Zuora.zObject('Contact');
acc.setValue('Id', newZCA.Zuora__BillToId__c);
acc.setValue('WorkPhone', String.isNotBlank(newZCA.Zuora__BillToWorkPhone__c) ? newZCA.Zuora__BillToWorkPhone__c : '');
*/
contactIds.add(newZCA.Zuora__BillToId__c);
//contactIds.add(newZCA.Zuora__SoldToId__c);
}
}
if(!(System.isFuture() || System.isBatch())){
if(contactIds.size() > 0){
ZuoraBillingAccountTriggerHandler.zouraUpdate(contactIds);
}
if(billingIds.size() > 0){
ZuoraBillingAccountTriggerHandler.zouraBillingAccountUpdate(billingIds);
}
}
}
@future(callout=true)
public static void zouraUpdate(Set<String> contactIds){
List<Zuora.zObject> zuoraZObjectList = new List<Zuora.zObject>();
for(Zuora__CustomerAccount__c newZCA : [select id,name,Zuora__BillToWorkPhone__c,Zuora__SoldToId__c,Zuora__Zuora_Id__c,Zuora__BillToId__c,Zuora__BillToName__c,
Zuora__BillToAddress1__c,Zuora__BillToAddress2__c,Zuora__BillToCity__c,Zuora__BillToState__c,Zuora__BillToPostalCode__c,Zuora__BillToCountry__c,
Zuora__BillToWorkEmail__c from Zuora__CustomerAccount__c where Zuora__BillToId__c IN :contactIds] ){
if (!Test.isRunningTest()) {
Zuora.zObject acc = new Zuora.zObject('Contact');
acc.setValue('Id', newZCA.Zuora__BillToId__c);
List<String> nameSplit = newZCA.Zuora__BillToName__c.split(' ');
acc.setValue('FirstName', String.isNotBlank(newZCA.Zuora__BillToName__c) ? newZCA.Zuora__BillToName__c : '');
acc.setValue('LastName', String.isNotBlank(newZCA.Zuora__BillToName__c) ? newZCA.Zuora__BillToName__c : '');
if(nameSplit.size() == 2){
acc.setValue('FirstName', nameSplit[0]);
acc.setValue('LastName', nameSplit[1]);
}
acc.setValue('Address1', String.isNotBlank(newZCA.Zuora__BillToAddress1__c) ? newZCA.Zuora__BillToAddress1__c : '');
acc.setValue('Address2', String.isNotBlank(newZCA.Zuora__BillToAddress2__c) ? newZCA.Zuora__BillToAddress2__c : '');
acc.setValue('City', String.isNotBlank(newZCA.Zuora__BillToCity__c) ? newZCA.Zuora__BillToCity__c : '');
acc.setValue('State', String.isNotBlank(newZCA.Zuora__BillToState__c) ? newZCA.Zuora__BillToState__c : '');
acc.setValue('PostalCode', String.isNotBlank(newZCA.Zuora__BillToPostalCode__c) ? newZCA.Zuora__BillToPostalCode__c : '');
acc.setValue('Country', String.isNotBlank(newZCA.Zuora__BillToCountry__c) ? newZCA.Zuora__BillToCountry__c : '');
acc.setValue('WorkEmail', String.isNotBlank(newZCA.Zuora__BillToWorkEmail__c) ? newZCA.Zuora__BillToWorkEmail__c : '');
acc.setValue('WorkPhone', String.isNotBlank(newZCA.Zuora__BillToWorkPhone__c) ? newZCA.Zuora__BillToWorkPhone__c : '');
zuoraZObjectList.add(acc);
}
}
/*for(Zuora__CustomerAccount__c newZCA : [select id,name,Zuora__BillToWorkPhone__c,Zuora__SoldToId__c,Zuora__Zuora_Id__c,Zuora__BillToId__c,Zuora__BillToName__c,
Zuora__BillToAddress1__c,Zuora__BillToAddress2__c,Zuora__BillToCity__c,Zuora__BillToState__c,Zuora__BillToPostalCode__c,Zuora__BillToCountry__c,
Zuora__BillToWorkEmail__c from Zuora__CustomerAccount__c where Zuora__BillToId__c IN :contactIds] ){
Zuora.zObject acc = new Zuora.zObject('Contact');
acc.setValue('Id', newZCA.Zuora__SoldToId__c);
List<String> nameSplit = newZCA.Zuora__BillToName__c.split(' ');
acc.setValue('FirstName', newZCA.Zuora__BillToName__c);
acc.setValue('LastName', newZCA.Zuora__BillToName__c);
if(nameSplit.size() == 2){
acc.setValue('FirstName', nameSplit[0]);
acc.setValue('LastName', nameSplit[1]);
}
acc.setValue('Address1', newZCA.Zuora__BillToAddress1__c);
acc.setValue('Address2', newZCA.Zuora__BillToAddress2__c);
acc.setValue('City', newZCA.Zuora__BillToCity__c);
acc.setValue('State', newZCA.Zuora__BillToState__c);
acc.setValue('PostalCode', newZCA.Zuora__BillToPostalCode__c);
acc.setValue('Country', newZCA.Zuora__BillToCountry__c);
acc.setValue('WorkEmail', newZCA.Zuora__BillToWorkEmail__c);
acc.setValue('WorkPhone', newZCA.Zuora__BillToWorkPhone__c);
zuoraZObjectList.add(acc);
}*/
Zuora.ZApi zApiInstance = new Zuora.ZApi();
if (!Test.isRunningTest()) {
Zuora.zApi.LoginResult loginResult = zApiInstance.zlogin();
}
if(!zuoraZObjectList.isEmpty()){
List<Zuora.zApi.SaveResult> results = new List<Zuora.zApi.SaveResult>();
if (!Test.isRunningTest()) {
// callout method documention is here: https://knowledgecenter.zuora.com/CA_Commerce/E_Development_Resources/B_Order_Builder/D_Programming_with_Order_Builder
results.addAll(zApiInstance.zupdate(zuoraZObjectList));
}
for (Zuora.zApi.SaveResult result : results) {
if (result.Success){
// nothing for now
}else{
//failure, get the errors
System.debug('CALLOUT FAILED');
// TODO: add error logic
/*Zuora.zObject[] errors = result.errors;
for (Zuora.zObject error : errors) {
String errorCode = (String)error.getValue('Code');
String message = (String)error.getValue('Message');
System.debug(errorCode + ' ' + message);
}*/
}
}
}
}
@future(callout=true)
public static void zouraBillingAccountUpdate(Set<String> contactIds){
List<Zuora.zObject> zuoraZObjectList = new List<Zuora.zObject>();
for(Zuora__CustomerAccount__c newZCA : [select id,name,Zuora__Zuora_Id__c from Zuora__CustomerAccount__c where Zuora__Zuora_Id__c IN :contactIds] ){
if (!Test.isRunningTest()) {
Zuora.zObject acc = new Zuora.zObject('Account');
acc.setValue('Id', newZCA.Zuora__Zuora_Id__c);
acc.setValue('Name',newZCA.Name);
zuoraZObjectList.add(acc);
}
}
Zuora.ZApi zApiInstance = new Zuora.ZApi();
if (!Test.isRunningTest()) {
Zuora.zApi.LoginResult loginResult = zApiInstance.zlogin();
}
if(!zuoraZObjectList.isEmpty()){
List<Zuora.zApi.SaveResult> results = new List<Zuora.zApi.SaveResult>();
if (!Test.isRunningTest()) {
// callout method documention is here: https://knowledgecenter.zuora.com/CA_Commerce/E_Development_Resources/B_Order_Builder/D_Programming_with_Order_Builder
results.addAll(zApiInstance.zupdate(zuoraZObjectList));
}
for (Zuora.zApi.SaveResult result : results) {
if (result.Success){
// nothing for now
}else{
//failure, get the errors
System.debug('CALLOUT FAILED');
// TODO: add error logic
/*
Zuora.zObject[] errors = result.errors;
for (Zuora.zObject error : errors) {
String errorCode = (String)error.getValue('Code');
String message = (String)error.getValue('Message');
System.debug(errorCode + ' ' + message);
}*/
}
}
}
}
}
Here is some additional reading....
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restful_http_testing_httpcalloutmock.htm