You need to sign in to do that
Don't have an account?
Andrew Likens
Unit Test for Web Service Callout and Custom Object
Hello,
I am trying to write a unit test for this class that makes a POST REST API callout. I also create a custom object based on the response I'm returning. I get 65%, but can't figure out how to get more code coverage. Any help is greatly appreciated!
Class:
Test Class I have so far:
I am trying to write a unit test for this class that makes a POST REST API callout. I also create a custom object based on the response I'm returning. I get 65%, but can't figure out how to get more code coverage. Any help is greatly appreciated!
Class:
global class AccountUpsert{ @future (callout=true) public static void AccountUpdate(Id accountId) { //Construct HTTP request and response //Http request method,Endpoint and setBody String body = '["accounts"]'; Http http = new Http(); HttpRequest request = new HttpRequest(); request.setEndpoint('http://dev-svc01.salesforce.signzoneinc.com:49831/v1/Account/' + accountId + '/Updated'); request.setMethod('POST'); request.setHeader('Content-Type', 'text/json'); request.setHeader('Content-Length', '0'); request.setBody(body); request.setTimeout(120000); HttpResponse response = http.send(request); // Parse the JSON response if (response.getStatusCode() > 399 || response == null) { System.debug('Status code returned was not expected: ' + response.getStatusCode() + ' ' + response.getStatus()); Error_Object__c[] errobj = new List<Error_Object__c>(); //Error_Object__c[] errobj = [SELECT Account__c, Account__r.Nav_Unique_ID__c FROM Error_Object__c]; //Create new record for failed messages. Error_Object is a holding queue for failed messages. Error_Object__c newErrorObject = new Error_Object__c(); newErrorObject.Account__c = accountId; errobj.add(newErrorObject); try { upsert errobj; } catch (DmlException e) { System.debug(e.getMessage()); } } else if (response.getStatusCode() >= 200 && response.getStatusCode() < 398) { Error_Object__c[] errobj1 = [SELECT Account__c, Account__r.Nav_Unique_ID__c FROM Error_Object__c WHERE Account__c = :accountId]; if (errobj1.size() > 0) { delete errobj1; } } } }HttpCalloutMockClass:
@isTest global class MakeMockHttpResponse implements HttpCalloutMock { //implement HTTPResponse Method global HTTPResponse respond(HTTPRequest request) { System.assertEquals('POST', request.GetMethod()); //create a fake response HttpResponse response = new HttpResponse(); response.setHeader('Content-Type', 'text/json'); response.setStatusCode(200); return response; } }
Test Class I have so far:
@isTest private class AccountUpsertTest { @isTest static void testCallout() { Test.setMock(HttpCalloutMock.Class, new MakeMockHttpResponse()); Test.startTest(); AccountUpsert.AccountUpdate('0015500000LVMRJ'); Test.stopTest(); } @isTest static void ErrorTest() { Test.startTest(); Error_Object__c newErrorObject = new Error_Object__c(); newErrorObject.Account__c = '0015500000LWoGS'; newErrorObject.OwnerId = '005i0000001EYnX'; try { upsert newErrorObject; } catch (DmlException e) { System.debug(e.getMessage()); } newErrorObject = [SELECT Id, Account__c FROM Error_Object__c WHERE Id = :newErrorObject.Id]; System.assertEquals('0015500000LWoGS', newErrorObject.Account__c); Test.stopTest(); } }