You need to sign in to do that
Don't have an account?
William Roach-Barrette
How to make production org use a static resource for web service callout validation
I have been trying to use static resources to test a piece of code I wrote and am trying to validate and deploy on my production org. I created a static resource called GDPR that houses the JSON. Then I wrote a private test class that mocks up a response then calls my method. The problem is no matter what I do I cant seem to make salesforce use the static resource when its validating my code. I will include all my code below, what do I need to modify to make this work properly?
WRAPPER:
Web Callout Class:
Test Class:
When I run the basic validation now I get four errors, all of them the same
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); } }
Web Callout Class:
public class JSONDeserialize { public GDPRWrapper wrapper {get;set;} @Future(callout=true) public static void deserialize() { GDPRWrapper wrapper; Http h = new Http(); HttpRequest request = new HttpRequest(); request.setEndPoint('**********************'); Blob headerValue = Blob.valueOf('d18849ea4155:d83ce6ef3dbe'); String authorizationHeader = ('Basic ' + EncodingUtil.base64Encode(headerValue)); request.setHeader('Authorization', authorizationHeader); request.setMethod('GET'); try{ HttpResponse 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()); } } 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()); } } }
Test Class:
@isTest private class desearializeTest{ @isTest static void testWebCalloutWithStaticResource(){ StaticResourceCalloutMock mock = new StaticResourceCalloutMock(); mock.setStaticResource('GDPR'); mock.setStatusCode(200); mock.setHeader('Content-Type', 'application/json'); Test.setMock(HttpCalloutMock.class, mock); JSONDeserialize.deserialize(); } }
When I run the basic validation now I get four errors, all of them the same
Methods defined as TestMethod do not support Web service callouts Stack Trace: null
Remove @isTest in the test class method and check once.
static void testWebCalloutWithStaticResource(){
}
Hope this helps you!
If my answer helps resolve your query, please mark it as the 'Best Answer' & upvote it to benefit others.
Thanks
Varaprasad
@For Support: varaprasad4sfdc@gmail.com