You need to sign in to do that
Don't have an account?
William Roach-Barrette
Validating webService callout using mock and @future causing deployment failure
I am currently trying to deploy some code on my production org and can only atchieve 64% code coverage. I am trying to test a web callout and have created a static resource that houses some sample JSON I want to parse. I belive my issue has to do with needing an @future call while also needing to return the HTTP response to validate my code while testing. I am getting the following erros on the following tests right now:
Here is my wrapper:
My web callout class:
My test class:
And finally, here is my current trigger, I think I might have some issues with this as well but one thing at a time:
Can someone please help me figure out why my code is failing and what I need to do to midigate some of the errors
Here is my wrapper:
public class GDPRWrapper{ public GDPRWrapper(List<GDPRData> templst){ GDPRList = templst; } public List<GDPRData> GDPRList {get; set;} public class GDPRData { public Integer gdprId {get; set;} //26636 public String firstName {get; set;} public String lastName {get; set;} public String email {get; set;} public String phone {get; set;} public String accountName {get; set;} public String contactId {get; set;} //AA111222333AAAe public String emailHash {get; set;} //78fcb5ad502033c46d35abcecb3615bd92757fb0451485a19b27b7515f6d82d0 public String createDate {get; set;} //2018-05-17T15:19:37.000+0000 public String responseDate {get; set;} //2018-05-21T10:38:53.000+0000 public String notifyDate {get; set;} public boolean marketing {get; set;} public boolean security {get; set;} public boolean support {get; set;} public boolean contactPhone {get; set;} public boolean contactEmail {get; set;} public boolean contactOther {get; set;} public boolean invalid {get; set;} } public static List<GDPRData> parse(httpResponse json){ return (List<GDPRData>) System.JSON.deserialize(json.getBody(), List<GDPRData>.class); } }
My web callout class:
public class JSONDeserialize { public GDPRWrapper wrapper {get;set;} //@Future(callout=true) public static HttpResponse deserialize() { GDPRWrapper wrapper; Http h = new Http(); HttpRequest request = new HttpRequest(); request.setEndPoint('PRIVATE'); Blob headerValue = Blob.valueOf('d18849ea4155:d83ce6ef3dbe'); String authorizationHeader = ('Basic ' + EncodingUtil.base64Encode(headerValue)); request.setHeader('Authorization', authorizationHeader); request.setMethod('GET'); HttpResponse response = new HttpResponse(); try{ response = h.send(request); System.debug('JSON RESPONSE: ' + response); List<GDPRWrapper.GDPRData> obj = GDPRWrapper.parse(response); wrapper = new GDPRWrapper(obj); System.assert(wrapper.GDPRList!=null); updateData(wrapper); }catch(JSONException j){ System.debug('An unexpected error has occured: ' + j.getMessage()); } return response; } public static void UpdateData(GDPRWrapper wrapper){ List<Contact> contactPref = new List<Contact>(); List<Contact> newContacts = new List<Contact>(); for(Integer i = 0; i < wrapper.GDPRList.size(); i ++){ if(wrapper.GDPRList[i].contactId.length() > 3){ if(wrapper.GDPRList[i].contactId.subString(0,3) == '003'){ Contact toInsert = new Contact(); toInsert.firstName = wrapper.GDPRList[i].firstName; toInsert.lastName = wrapper.GDPRList[i].lastName; toInsert.email = wrapper.GDPRList[i].email; toInsert.Email_Hash__c = wrapper.GDPRList[i].emailHash; toInsert.Id = wrapper.GDPRList[i].contactId; toInsert.Sales_and_Marketing__c = wrapper.GDPRList[i].marketing; toInsert.Critical_Security_Notes__c = wrapper.GDPRList[i].security; toInsert.Product_Information__c = wrapper.GDPRList[i].support; toInsert.Contact_Via_Text__c = wrapper.GDPRList[i].contactPhone; toInsert.Contact_Via_Email__c = wrapper.GDPRList[i].contactEmail; contactPref.add(toInsert); } } else{ Contact toInsert = new Contact(); toInsert.firstName = wrapper.GDPRList[i].firstName; toInsert.lastName = wrapper.GDPRList[i].lastName; toInsert.email = wrapper.GDPRList[i].email; toInsert.Email_Hash__c = wrapper.GDPRList[i].emailHash; toInsert.Sales_and_Marketing__c = wrapper.GDPRList[i].marketing; toInsert.Critical_Security_Notes__c = wrapper.GDPRList[i].security; toInsert.Product_Information__c = wrapper.GDPRList[i].support; toInsert.Contact_Via_Text__c = wrapper.GDPRList[i].contactPhone; toInsert.Contact_Via_Email__c = wrapper.GDPRList[i].contactEmail; newContacts.add(toInsert); } } try{ if(contactPref.size()>0){ upsert contactPref; } if(NewContacts.size()>0){ insert NewContacts; } } catch(DmlException e){ System.debug('An unexpected error has occured: ' + e.getMessage()); } } }
My test class:
@isTest private class JSONDeserializeTest { @isTest static void testCalloutEithStaticResource(){ StaticResourceCalloutMock mock = new StaticResourceCalloutMock(); mock.setStaticResource('GDPR'); mock.setStatusCode(200); mock.setHeader('Content-Type', 'application/json'); Test.setMock(HttpCalloutMock.class, mock); HttpResponse res = JSONDeserialize.deserialize(); System.assertEquals('PRIVATE DATA', res.getBody()); System.assertEquals(200, res.getStatusCode()); System.assertEquals('application/json', res.getHeader('Content-Type')); } }
And finally, here is my current trigger, I think I might have some issues with this as well but one thing at a time:
trigger GDPR_Prefrences_Updater on Contact (after insert, after update) { if(System.IsBatch() == false && System.isFuture() == false){ JSONDeserialize.deserialize(); } }
Can someone please help me figure out why my code is failing and what I need to do to midigate some of the errors
Don't Slash this line : @Future(callout=true)
public class JSONDeserialize {
public GDPRWrapper wrapper {get;set;}
@Future(callout=true) // It should not be slashed
public static HttpResponse deserialize() {
GDPRWrapper wrapper;
Http h = new Http();
HttpRequest request = new HttpRequest();
request.setEndPoint('PRIVATE');
Blob headerValue = Blob.valueOf('d18849ea4155:d83ce6ef3dbe');
String authorizationHeader = ('Basic ' + EncodingUtil.base64Encode(headerValue));
request.setHeader('Authorization', authorizationHeader);
request.setMethod('GET');
HttpResponse response = new HttpResponse();
try{
response = h.send(request);
System.debug('JSON RESPONSE: ' + response);
List<GDPRWrapper.GDPRData> obj = GDPRWrapper.parse(response);
wrapper = new GDPRWrapper(obj);
System.assert(wrapper.GDPRList!=null);
updateData(wrapper);
}catch(JSONException j){
System.debug('An unexpected error has occured: ' + j.getMessage());
}
return response;
}
public static void UpdateData(GDPRWrapper wrapper){
List<Contact> contactPref = new List<Contact>();
List<Contact> newContacts = new List<Contact>();
for(Integer i = 0; i < wrapper.GDPRList.size(); i ++){
if(wrapper.GDPRList[i].contactId.length() > 3){
if(wrapper.GDPRList[i].contactId.subString(0,3) == '003'){
Contact toInsert = new Contact();
toInsert.firstName = wrapper.GDPRList[i].firstName;
toInsert.lastName = wrapper.GDPRList[i].lastName;
toInsert.email = wrapper.GDPRList[i].email;
toInsert.Email_Hash__c = wrapper.GDPRList[i].emailHash;
toInsert.Id = wrapper.GDPRList[i].contactId;
toInsert.Sales_and_Marketing__c = wrapper.GDPRList[i].marketing;
toInsert.Critical_Security_Notes__c = wrapper.GDPRList[i].security;
toInsert.Product_Information__c = wrapper.GDPRList[i].support;
toInsert.Contact_Via_Text__c = wrapper.GDPRList[i].contactPhone;
toInsert.Contact_Via_Email__c = wrapper.GDPRList[i].contactEmail;
contactPref.add(toInsert);
}
}
else{
Contact toInsert = new Contact();
toInsert.firstName = wrapper.GDPRList[i].firstName;
toInsert.lastName = wrapper.GDPRList[i].lastName;
toInsert.email = wrapper.GDPRList[i].email;
toInsert.Email_Hash__c = wrapper.GDPRList[i].emailHash;
toInsert.Sales_and_Marketing__c = wrapper.GDPRList[i].marketing;
toInsert.Critical_Security_Notes__c = wrapper.GDPRList[i].security;
toInsert.Product_Information__c = wrapper.GDPRList[i].support;
toInsert.Contact_Via_Text__c = wrapper.GDPRList[i].contactPhone;
toInsert.Contact_Via_Email__c = wrapper.GDPRList[i].contactEmail;
newContacts.add(toInsert);
}
}
try{
if(contactPref.size()>0){
upsert contactPref;
}
if(NewContacts.size()>0){
insert NewContacts;
}
}
catch(DmlException e){
System.debug('An unexpected error has occured: ' + e.getMessage());
}
}
}
=============================
And update the Trigger as like below:
trigger GDPR_Prefrences_Updater on Contact (after insert, after update)
{
if(System.IsBatch() == false && System.isFuture() == True)
{
JSONDeserialize.deserialize();
}
}
Can you please Let me know if it helps or not!!!
If it helps don't forget to mark this as a best answer!!!
Thanks,
Raj
please try the below code:
public class JSONDeserialize {
public GDPRWrapper wrapper {get;set;}
@Future(callout=true)
Public static void firecallout(string str)
{
System. debug('@@@ ' + str);
JSONDeserialize.deserialize();
}
public static HttpResponse deserialize() {
GDPRWrapper wrapper;
Http h = new Http();
HttpRequest request = new HttpRequest();
request.setEndPoint('PRIVATE');
Blob headerValue = Blob.valueOf('d18849ea4155:d83ce6ef3dbe');
String authorizationHeader = ('Basic ' + EncodingUtil.base64Encode(headerValue));
request.setHeader('Authorization', authorizationHeader);
request.setMethod('GET');
HttpResponse response = new HttpResponse();
try{
response = h.send(request);
System.debug('JSON RESPONSE: ' + response);
List<GDPRWrapper.GDPRData> obj = GDPRWrapper.parse(response);
wrapper = new GDPRWrapper(obj);
System.assert(wrapper.GDPRList!=null);
updateData(wrapper);
}catch(JSONException j){
System.debug('An unexpected error has occured: ' + j.getMessage());
}
return response;
}
public static void UpdateData(GDPRWrapper wrapper){
List<Contact> contactPref = new List<Contact>();
List<Contact> newContacts = new List<Contact>();
for(Integer i = 0; i < wrapper.GDPRList.size(); i ++){
if(wrapper.GDPRList[i].contactId.length() > 3){
if(wrapper.GDPRList[i].contactId.subString(0,3) == '003'){
Contact toInsert = new Contact();
toInsert.firstName = wrapper.GDPRList[i].firstName;
toInsert.lastName = wrapper.GDPRList[i].lastName;
toInsert.email = wrapper.GDPRList[i].email;
toInsert.Email_Hash__c = wrapper.GDPRList[i].emailHash;
toInsert.Id = wrapper.GDPRList[i].contactId;
toInsert.Sales_and_Marketing__c = wrapper.GDPRList[i].marketing;
toInsert.Critical_Security_Notes__c = wrapper.GDPRList[i].security;
toInsert.Product_Information__c = wrapper.GDPRList[i].support;
toInsert.Contact_Via_Text__c = wrapper.GDPRList[i].contactPhone;
toInsert.Contact_Via_Email__c = wrapper.GDPRList[i].contactEmail;
contactPref.add(toInsert);
}
}
else{
Contact toInsert = new Contact();
toInsert.firstName = wrapper.GDPRList[i].firstName;
toInsert.lastName = wrapper.GDPRList[i].lastName;
toInsert.email = wrapper.GDPRList[i].email;
toInsert.Email_Hash__c = wrapper.GDPRList[i].emailHash;
toInsert.Sales_and_Marketing__c = wrapper.GDPRList[i].marketing;
toInsert.Critical_Security_Notes__c = wrapper.GDPRList[i].security;
toInsert.Product_Information__c = wrapper.GDPRList[i].support;
toInsert.Contact_Via_Text__c = wrapper.GDPRList[i].contactPhone;
toInsert.Contact_Via_Email__c = wrapper.GDPRList[i].contactEmail;
newContacts.add(toInsert);
}
}
try{
if(contactPref.size()>0){
upsert contactPref;
}
if(NewContacts.size()>0){
insert NewContacts;
}
}
catch(DmlException e){
System.debug('An unexpected error has occured: ' + e.getMessage());
}
}
}
====================
And update the Trigger as like below:
trigger GDPR_Prefrences_Updater on Contact (after insert, after update)
{
if(System.IsBatch() == false && System.isFuture() == false)
{
JSONDeserialize.firecallout('callout fires');
}
}
Can you please Let me know if it helps or not!!!
If it helps don't forget to mark this as a best answer!!!
Thanks,
Raj