Created
December 6, 2023 08:24
-
-
Save burlistic/301969d9da64115ddfe9bfd58b0db4d0 to your computer and use it in GitHub Desktop.
APEX REST Service
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class AnimalLocator { | |
public static String getAnimalNameById(Integer i){ | |
Http http = new Http(); | |
HttpRequest request = new HttpRequest(); | |
request.setEndpoint('https://th-apex-http-callout.herokuapp.com/animals/' + i); | |
request.setMethod('GET'); | |
HttpResponse response = http.send(request); | |
// If the request is successful, parse the JSON response. | |
if(response.getStatusCode() == 200) { | |
// Deserializes the JSON string into collections of primitive data types. | |
Map<String, Object> result = (Map<String, Object>) JSON.deserializeUntyped(response.getBody()); | |
Map<String, Object> animal = (Map<String, Object>) result.get('animal'); | |
System.debug('Received the following animal name:'); | |
System.debug(string.valueOf(animal.get('name'))); | |
return string.valueOf(animal.get('name')); | |
} | |
return null; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@isTest | |
global class AnimalLocatorMock implements HttpCalloutMock { | |
// Implement this interface method | |
global HTTPResponse respond(HTTPRequest request) { | |
// Create a fake response | |
HttpResponse response = new HttpResponse(); | |
response.setHeader('Content-Type', 'application/json'); | |
response.setBody('{"animal": {"id":1,"name": "moose", "eats":"plants","says":"bellows"}}'); | |
response.setStatusCode(200); | |
return response; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@isTest | |
public class AnimalLocatorTest { | |
@isTest static void testGetAnimalNameById() { | |
Test.setMock(HttpCalloutMock.class, new AnimalLocatorMock()); | |
String result = AnimalLocator.getAnimalNameById(1); | |
System.assertEquals('moose', result); | |
} | |
@isTest static void testGetAnimalNameById500() { | |
StaticResourceCalloutMock mock = new StaticResourceCalloutMock(); | |
mock.setStaticResource('GetAnimalResource'); | |
// Set a failed request code - content can be ignored | |
mock.setStatusCode(500); | |
// Associate the callout with a mock response | |
Test.setMock(HttpCalloutMock.class, mock); | |
String result = AnimalLocator.getAnimalNameById(1); | |
System.assertEquals(null, result); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class AnimalsCallouts { | |
public static HttpResponse makeGetCallout() { | |
Http http = new Http(); | |
HttpRequest request = new HttpRequest(); | |
request.setEndpoint('https://th-apex-http-callout.herokuapp.com/animals'); | |
request.setMethod('GET'); | |
HttpResponse response = http.send(request); | |
// If the request is successful, parse the JSON response. | |
if(response.getStatusCode() == 200) { | |
// Deserializes the JSON string into collections of primitive data types. | |
Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody()); | |
// Cast the values in the 'animals' key as a list | |
List<Object> animals = (List<Object>) results.get('animals'); | |
System.debug('Received the following animals:'); | |
for(Object animal: animals) { | |
System.debug(animal); | |
} | |
} | |
return response; | |
} | |
public static HttpResponse makePostCallout() { | |
Http http = new Http(); | |
HttpRequest request = new HttpRequest(); | |
request.setEndpoint('https://th-apex-http-callout.herokuapp.com/animals'); | |
request.setMethod('POST'); | |
request.setHeader('Content-Type', 'application/json;charset=UTF-8'); | |
request.setBody('{"name":"mighty moose"}'); | |
HttpResponse response = http.send(request); | |
// Parse the JSON response | |
if(response.getStatusCode() != 201) { | |
System.debug('The status code returned was not expected: ' + | |
response.getStatusCode() + ' ' + response.getStatus()); | |
} else { | |
System.debug(response.getBody()); | |
} | |
return response; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@isTest | |
private class AnimalsCalloutsTest { | |
@isTest static void testGetCallout() { | |
// Create the mock response based on a static resource | |
StaticResourceCalloutMock mock = new StaticResourceCalloutMock(); | |
mock.setStaticResource('GetAnimalResource'); | |
mock.setStatusCode(200); | |
mock.setHeader('Content-Type', 'application/json;charset=UTF-8'); | |
// Associate the callout with a mock response | |
Test.setMock(HttpCalloutMock.class, mock); | |
// Call method to test | |
HttpResponse result = AnimalsCallouts.makeGetCallout(); | |
// Verify mock response is not null | |
System.assertNotEquals(null,result, 'The callout returned a null response.'); | |
// Verify status code | |
System.assertEquals(200,result.getStatusCode(), 'The status code is not 200.'); | |
// Verify content type | |
System.assertEquals('application/json;charset=UTF-8', | |
result.getHeader('Content-Type'), | |
'The content type value is not expected.'); | |
// Verify the array contains 3 items | |
Map<String, Object> results = (Map<String, Object>) | |
JSON.deserializeUntyped(result.getBody()); | |
List<Object> animals = (List<Object>) results.get('animals'); | |
System.assertEquals(3, animals.size(), 'The array should only contain 3 items.'); | |
} | |
@isTest | |
static void testPostCallout() { | |
// Set mock callout class | |
Test.setMock(HttpCalloutMock.class, new AnimalsHttpCalloutMock()); | |
// This causes a fake response to be sent | |
// from the class that implements HttpCalloutMock. | |
HttpResponse response = AnimalsCallouts.makePostCallout(); | |
// Verify that the response received contains fake values | |
String contentType = response.getHeader('Content-Type'); | |
System.assert(contentType == 'application/json'); | |
String actualValue = response.getBody(); | |
System.debug(response.getBody()); | |
String expectedValue = '{"animals": ["majestic badger", "fluffy bunny", "scary bear", "chicken", "mighty moose"]}'; | |
System.assertEquals(expectedValue, actualValue); | |
System.assertEquals(200, response.getStatusCode()); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@isTest | |
global class AnimalsHttpCalloutMock implements HttpCalloutMock { | |
// Implement this interface method | |
global HTTPResponse respond(HTTPRequest request) { | |
// Create a fake response | |
HttpResponse response = new HttpResponse(); | |
response.setHeader('Content-Type', 'application/json'); | |
response.setBody('{"animals": ["majestic badger", "fluffy bunny", "scary bear", "chicken", "mighty moose"]}'); | |
response.setStatusCode(200); | |
return response; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment