diff --git a/Readme.md b/Readme.md index 43eb7b3..b621e8d 100644 --- a/Readme.md +++ b/Readme.md @@ -1,7 +1,72 @@ # Httpex -Apex library for HTTP callouts. +Apex library for HTTP callouts. +## Usage +You can use it with variety of request methods, authentication types or contexts. + +### Request methods +Library is able to execute GET, POST, PUT, PATCH, DELET, HEAD. +POST example: +``` +Object result = new HttpClientAura( + new HttpClientProviderAuthProvider('SampleAuthProviderName')) + .post('https://foo.com' + + '/v1/resource/baz/post' + , '{"fizz":"buzz"}'); +``` + +### Authentication types +Library supports several authentication schemes - AuthProvider, Named credentials, Cookie based authentication or basic username/password authentication, for example: +``` +static Object postQuxByParams(String params){ + return + new HttpClientAura( + new HttpClientProviderBasic('admin', 'hunter2')) + .post('https://foo.com' + + '/v2/qux/post', + params); + } +``` + +### Contexts + +#### Usage in Lightning server side controllers +Library provides basic catching of errors and reporting them via AuraHandledException that is readable on client side. Example call: +``` +@AuraEnabled public static Object getFoo() { + return + new HttpClientAura( + new HttpClientProviderNamedCredentials('SampleNamedCredential')) + .get('https://foo.com' + + '/v3/resource/foo/get'); + } +``` + +#### Usage elsewhere +``` +new HttpClient( + new HttpClientProviderAuthProvider('SampleAuthProviderName')) + .get('https://foo.com' + + '/v1/resource/foo/get'); +``` + +#### Calling internal API's +``` +final static String endpoint = '/services/data/'; +final static String apiVersion = 'v43.0'; +final static String query = '/tooling/query?q='; +final static String param = 'SELECT Description, EndpointUrl, FullName, IsActive, ManageableState, NamespacePrefix, ProtocolMismatch, SiteName, Metadata FROM RemoteProxy'; +final static String sobjectApi = '/tooling/sobjects/RemoteProxy/'; +@AuraEnabled public static Object Query(){ + HttpClientProviderSelf self = new HttpClientProviderSelf(); + return new HttpClientAura(self) + .get(self.getBaseUrl() + endpoint + apiVersion + query + EncodingUtil.urlEncode(param, 'UTF-8')); +} +``` + +See more at https://github.com/metacursion/RemoteSitesService + Deploy to Salesforce - \ No newline at end of file + diff --git a/src/classes/HttpCalloutException.cls b/src/classes/HttpCalloutException.cls old mode 100644 new mode 100755 diff --git a/src/classes/HttpCalloutException.cls-meta.xml b/src/classes/HttpCalloutException.cls-meta.xml old mode 100644 new mode 100755 diff --git a/src/classes/HttpClient.cls b/src/classes/HttpClient.cls old mode 100644 new mode 100755 index 6d0e38e..473f41f --- a/src/classes/HttpClient.cls +++ b/src/classes/HttpClient.cls @@ -1,40 +1,41 @@ -public with sharing class HttpClient { - - public ICredentialsProvider credentials { get; set; } +public with sharing virtual class HttpClient { + final static Integer CALLOUT_TIMEOUT = 20000; + public HttpClientProviderInterface credentials { get; set; } public HttpClient(){} - public HttpClient(ICredentialsProvider credentials) { + public HttpClient(HttpClientProviderInterface credentials) { this.credentials = credentials; } - public HttpResponse get(String endpoint) { + public virtual Object get(String endpoint) { return callout(endpoint, '', 'GET'); } - public HttpResponse post(String endpoint, String payload) { + public virtual Object post(String endpoint, String payload) { return callout(endpoint, payload, 'POST'); } - public HttpResponse put(String endpoint, String payload) { + public virtual Object put(String endpoint, String payload) { return callout(endpoint, payload, 'PUT'); } - public HttpResponse patch(String endpoint, String payload) { + public virtual Object patch(String endpoint, String payload) { return callout(endpoint, payload, 'PATCH'); } - public HttpResponse del(String endpoint) { + public virtual Object del(String endpoint) { return callout(endpoint, '', 'DELETE'); } - public HttpResponse head(String endpoint) { + public virtual Object head(String endpoint) { return callout(endpoint, '', 'HEAD'); } public HttpResponse callout(String endpoint, String payload, String method) { Http http = new Http(); HttpRequest request = new HttpRequest(); + request.setTimeout(CALLOUT_TIMEOUT); request.setEndpoint(endpoint); request.setMethod(method); if(new String[]{'POST', 'PATCH', 'PUT'}.contains( method )){ @@ -43,15 +44,18 @@ public with sharing class HttpClient { } if(credentials != null) { - if(credentials instanceof NamedCredentialsProvider) { + if(credentials instanceof HttpClientProviderNamedCredentials) { endpoint = endpoint.startsWith('/') ? endpoint : '/' + endpoint; request.setEndpoint(credentials.getHeader() + endpoint); - } - else { + } else if(credentials instanceof HttpClientProviderCookie) { + request.setHeader('Cookie', credentials.getHeader()); + } else if(credentials instanceof HttpClientProviderBearer) { + request.setHeader('Authorization', credentials.getHeader()); + } else { request.setHeader('Authorization', credentials.getHeader()); } } return http.send(request); } -} +} \ No newline at end of file diff --git a/src/classes/HttpClient.cls-meta.xml b/src/classes/HttpClient.cls-meta.xml old mode 100644 new mode 100755 diff --git a/src/classes/HttpClientAura.cls b/src/classes/HttpClientAura.cls new file mode 100644 index 0000000..f66fef9 --- /dev/null +++ b/src/classes/HttpClientAura.cls @@ -0,0 +1,76 @@ +public class HttpClientAura extends HttpClient { + public HttpClientAura(HttpClientProviderInterface credentials) { + super.credentials = credentials; + } + public override Object get(String endpoint) { + try { + return parse((HttpResponse)super.get(endpoint)); + } catch( Exception e ){ + AuraHandledException ex = new AuraHandledException( e.getMessage() ); + ex.setMessage( e.getMessage() ); + throw ex; + } + } + public override Object post(String endpoint, String payload) { + try { + return parse((HttpResponse)super.post(endpoint, payload)); + } catch( Exception e ){ + AuraHandledException ex = new AuraHandledException( e.getMessage() ); + ex.setMessage( e.getMessage() ); + throw ex; + } + } + public override Object put(String endpoint, String payload) { + try { + return parse((HttpResponse)super.put(endpoint, payload)); + } catch( Exception e ){ + AuraHandledException ex = new AuraHandledException( e.getMessage() ); + ex.setMessage( e.getMessage() ); + throw ex; + } + } + public override Object patch(String endpoint, String payload) { + try { + return parse((HttpResponse)super.patch(endpoint, payload)); + } catch( Exception e ){ + AuraHandledException ex = new AuraHandledException( e.getMessage() ); + ex.setMessage( e.getMessage() ); + throw ex; + } + } + public override Object del(String endpoint) { + try { + return parse((HttpResponse)super.del(endpoint)); + } catch( Exception e ){ + AuraHandledException ex = new AuraHandledException( e.getMessage() ); + ex.setMessage( e.getMessage() ); + throw ex; + } + } + public override Object head(String endpoint) { + try { + return parse((HttpResponse)super.head(endpoint)); + } catch( Exception e ){ + AuraHandledException ex = new AuraHandledException( e.getMessage() ); + ex.setMessage( e.getMessage() ); + throw ex; + } + } + public Object parse(HttpResponse response){ + if ( response.getStatusCode() < 300 ) { + try { + return JSON.deserializeUntyped( response.getBody() ); + } catch( Exception e ){ + AuraHandledException ex = new AuraHandledException( e.getMessage() ); + ex.setMessage( e.getMessage() ); + throw ex; + } + } else { + System.debug(LoggingLevel.ERROR, response.getBody()); + String error = response.getStatusCode() + ': ' + response.getStatus(); + AuraHandledException ex = new AuraHandledException(error); + ex.setMessage( error ); + throw ex; + } + } +} \ No newline at end of file diff --git a/src/classes/BasicProvider.cls-meta.xml b/src/classes/HttpClientAura.cls-meta.xml similarity index 100% rename from src/classes/BasicProvider.cls-meta.xml rename to src/classes/HttpClientAura.cls-meta.xml diff --git a/src/classes/HttpClientBasicMock.cls b/src/classes/HttpClientBasicMock.cls old mode 100644 new mode 100755 diff --git a/src/classes/HttpClientBasicMock.cls-meta.xml b/src/classes/HttpClientBasicMock.cls-meta.xml old mode 100644 new mode 100755 diff --git a/src/classes/HttpClientMock.cls b/src/classes/HttpClientMock.cls old mode 100644 new mode 100755 diff --git a/src/classes/HttpClientMock.cls-meta.xml b/src/classes/HttpClientMock.cls-meta.xml old mode 100644 new mode 100755 diff --git a/src/classes/HttpClientNamedCredentialsMock.cls b/src/classes/HttpClientNamedCredentialsMock.cls old mode 100644 new mode 100755 diff --git a/src/classes/HttpClientNamedCredentialsMock.cls-meta.xml b/src/classes/HttpClientNamedCredentialsMock.cls-meta.xml old mode 100644 new mode 100755 diff --git a/src/classes/HttpClientOAuthMock.cls b/src/classes/HttpClientOAuthMock.cls old mode 100644 new mode 100755 diff --git a/src/classes/HttpClientOAuthMock.cls-meta.xml b/src/classes/HttpClientOAuthMock.cls-meta.xml old mode 100644 new mode 100755 diff --git a/src/classes/HttpClientProviderAuthProvider.cls b/src/classes/HttpClientProviderAuthProvider.cls new file mode 100644 index 0000000..ad76982 --- /dev/null +++ b/src/classes/HttpClientProviderAuthProvider.cls @@ -0,0 +1,27 @@ +public class HttpClientProviderAuthProvider implements HttpClientProviderInterface { + private String authProviderId { get; set; } + private String authProviderType { get; set; } + + public HttpClientProviderAuthProvider(String authProviderName) { + AuthProvider[] providers = [ + SELECT + Id, + ProviderType + FROM AuthProvider + WHERE FriendlyName =: authProviderName]; + if( providers.isEmpty() ){ + throw new QueryException('No such Auth Provider '+ authProviderName + ' has been found.'); + } else { + this.authProviderId = providers[0].Id; + if(providers[0].ProviderType == 'OpenIdConnect'){ + this.authProviderType = 'Open Id Connect'; + } else { + this.authProviderType = providers[0].ProviderType; + } + } + + } + public String getHeader() { + return 'Bearer ' + Auth.AuthToken.getAccessToken(authProviderId, authProviderType); + } +} \ No newline at end of file diff --git a/src/classes/ICredentialsProvider.cls-meta.xml b/src/classes/HttpClientProviderAuthProvider.cls-meta.xml similarity index 100% rename from src/classes/ICredentialsProvider.cls-meta.xml rename to src/classes/HttpClientProviderAuthProvider.cls-meta.xml diff --git a/src/classes/BasicProvider.cls b/src/classes/HttpClientProviderBasic.cls old mode 100644 new mode 100755 similarity index 69% rename from src/classes/BasicProvider.cls rename to src/classes/HttpClientProviderBasic.cls index edb0e9b..505910d --- a/src/classes/BasicProvider.cls +++ b/src/classes/HttpClientProviderBasic.cls @@ -1,9 +1,9 @@ -public class BasicProvider implements ICredentialsProvider { +public class HttpClientProviderBasic implements HttpClientProviderInterface { private String username { get; set; } private String password { get; set; } - public BasicProvider(String username, String password) { + public HttpClientProviderBasic(String username, String password) { this.username = username; this.password = password; } diff --git a/src/classes/NamedCredentialsProvider.cls-meta.xml b/src/classes/HttpClientProviderBasic.cls-meta.xml old mode 100644 new mode 100755 similarity index 100% rename from src/classes/NamedCredentialsProvider.cls-meta.xml rename to src/classes/HttpClientProviderBasic.cls-meta.xml diff --git a/src/classes/HttpClientProviderBearer.cls b/src/classes/HttpClientProviderBearer.cls new file mode 100644 index 0000000..b6b2966 --- /dev/null +++ b/src/classes/HttpClientProviderBearer.cls @@ -0,0 +1,12 @@ +public class HttpClientProviderBearer implements HttpClientProviderInterface { + + private String token { get; set; } + + public HttpClientProviderBearer(String token) { + this.token = token; + } + + public String getHeader() { + return 'Bearer ' + token; + } +} \ No newline at end of file diff --git a/src/classes/OAuthProvider.cls-meta.xml b/src/classes/HttpClientProviderBearer.cls-meta.xml similarity index 100% rename from src/classes/OAuthProvider.cls-meta.xml rename to src/classes/HttpClientProviderBearer.cls-meta.xml diff --git a/src/classes/HttpClientProviderCookie.cls b/src/classes/HttpClientProviderCookie.cls new file mode 100644 index 0000000..278f757 --- /dev/null +++ b/src/classes/HttpClientProviderCookie.cls @@ -0,0 +1,21 @@ +/** + * Created by heyoo on 10/07/18. + */ + +public class HttpClientProviderCookie implements HttpClientProviderInterface { + + private Map cookies { get; set; } + + public HttpClientProviderCookie(Map cookies) { + this.cookies = cookies; + } + + public String getHeader() { + String cookie = ''; + for(String i: this.cookies.keySet()){ + cookie += i+':'+cookies.get(i); + } + return 'Cookie: ' + cookie; + } + +} \ No newline at end of file diff --git a/src/classes/HttpClientProviderCookie.cls-meta.xml b/src/classes/HttpClientProviderCookie.cls-meta.xml new file mode 100644 index 0000000..800e53c --- /dev/null +++ b/src/classes/HttpClientProviderCookie.cls-meta.xml @@ -0,0 +1,5 @@ + + + 43.0 + Active + diff --git a/src/classes/HttpClientProviderInterface.cls b/src/classes/HttpClientProviderInterface.cls new file mode 100755 index 0000000..1ae5a7c --- /dev/null +++ b/src/classes/HttpClientProviderInterface.cls @@ -0,0 +1,3 @@ +public interface HttpClientProviderInterface { + String getHeader(); +} \ No newline at end of file diff --git a/src/classes/HttpClientProviderInterface.cls-meta.xml b/src/classes/HttpClientProviderInterface.cls-meta.xml new file mode 100755 index 0000000..800e53c --- /dev/null +++ b/src/classes/HttpClientProviderInterface.cls-meta.xml @@ -0,0 +1,5 @@ + + + 43.0 + Active + diff --git a/src/classes/NamedCredentialsProvider.cls b/src/classes/HttpClientProviderNamedCredentials.cls old mode 100644 new mode 100755 similarity index 54% rename from src/classes/NamedCredentialsProvider.cls rename to src/classes/HttpClientProviderNamedCredentials.cls index 04e9ac6..01b7ff9 --- a/src/classes/NamedCredentialsProvider.cls +++ b/src/classes/HttpClientProviderNamedCredentials.cls @@ -1,8 +1,8 @@ -public class NamedCredentialsProvider implements ICredentialsProvider { +public class HttpClientProviderNamedCredentials implements HttpClientProviderInterface { private String namedCredentials { get; set; } - public NamedCredentialsProvider(String namedCredentialsName) { + public HttpClientProviderNamedCredentials(String namedCredentialsName) { this.namedCredentials = namedCredentialsName; } diff --git a/src/classes/HttpClientProviderNamedCredentials.cls-meta.xml b/src/classes/HttpClientProviderNamedCredentials.cls-meta.xml new file mode 100755 index 0000000..800e53c --- /dev/null +++ b/src/classes/HttpClientProviderNamedCredentials.cls-meta.xml @@ -0,0 +1,5 @@ + + + 43.0 + Active + diff --git a/src/classes/OAuthProvider.cls b/src/classes/HttpClientProviderOAuth.cls old mode 100644 new mode 100755 similarity index 88% rename from src/classes/OAuthProvider.cls rename to src/classes/HttpClientProviderOAuth.cls index 6cdccfd..704bf2b --- a/src/classes/OAuthProvider.cls +++ b/src/classes/HttpClientProviderOAuth.cls @@ -1,10 +1,10 @@ -public class OAuthProvider implements ICredentialsProvider { +public class HttpClientProviderOAuth implements HttpClientProviderInterface { public String accessToken { get; set; } public String authenticationUrl { get; set; } private Map authParameters { get; set; } - public OAuthProvider(String authenticationUrl, Map authParameters) { + public HttpClientProviderOAuth(String authenticationUrl, Map authParameters) { this.authenticationUrl = authenticationUrl; this.authParameters = authParameters; } diff --git a/src/classes/HttpClientProviderOAuth.cls-meta.xml b/src/classes/HttpClientProviderOAuth.cls-meta.xml new file mode 100755 index 0000000..800e53c --- /dev/null +++ b/src/classes/HttpClientProviderOAuth.cls-meta.xml @@ -0,0 +1,5 @@ + + + 43.0 + Active + diff --git a/src/classes/HttpClientProviderSelf.cls b/src/classes/HttpClientProviderSelf.cls new file mode 100644 index 0000000..9cb89fd --- /dev/null +++ b/src/classes/HttpClientProviderSelf.cls @@ -0,0 +1,15 @@ +public class HttpClientProviderSelf implements HttpClientProviderInterface { + static String[] ref { get; set; } + public String getHeader() { + return 'Bearer ' + ref[0]; + } + public String getBaseUrl() { + ref = Page.HttpClientProviderSelf.getContent().toString().split(';'); + return ref[1]; + } + public String salesforceBaseUrl { + get { + return System.Url.getSalesforceBaseUrl().toExternalForm(); + } + } +} \ No newline at end of file diff --git a/src/classes/HttpClientProviderSelf.cls-meta.xml b/src/classes/HttpClientProviderSelf.cls-meta.xml new file mode 100644 index 0000000..800e53c --- /dev/null +++ b/src/classes/HttpClientProviderSelf.cls-meta.xml @@ -0,0 +1,5 @@ + + + 43.0 + Active + diff --git a/src/classes/HttpClientTests.cls b/src/classes/HttpClientTests.cls old mode 100644 new mode 100755 index a276ceb..0710744 --- a/src/classes/HttpClientTests.cls +++ b/src/classes/HttpClientTests.cls @@ -22,7 +22,7 @@ public class HttpClientTests { HttpClient client = new HttpClient(); // Act - HttpResponse res = client.post(ENDPOINT, PAYLOAD_REQUEST); + HttpResponse res = (HttpResponse) client.post(ENDPOINT, PAYLOAD_REQUEST); // Assert System.assertEquals(null, client.credentials); @@ -35,13 +35,13 @@ public class HttpClientTests { // Arange Test.setMock(HttpCalloutMock.class, new HttpClientBasicMock('POST')); - HttpClient client = new HttpClient(new BasicProvider(AUTH_BASIC_USERNAME, AUTH_BASIC_PASSWORD)); + HttpClient client = new HttpClient(new HttpClientProviderBasic(AUTH_BASIC_USERNAME, AUTH_BASIC_PASSWORD)); // Act - HttpResponse res = client.post(ENDPOINT, PAYLOAD_REQUEST); + HttpResponse res = (HttpResponse) client.post(ENDPOINT, PAYLOAD_REQUEST); // Assert - System.assert(client.credentials instanceof BasicProvider); + System.assert(client.credentials instanceof HttpClientProviderBasic); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); } @@ -52,16 +52,16 @@ public class HttpClientTests { Test.setMock(HttpCalloutMock.class, new HttpClientOAuthMock('POST')); HttpClient client = new HttpClient( - new OAuthProvider(AUTH_OAUTH_ENDPOINT, new Map{ + new HttpClientProviderOAuth(AUTH_OAUTH_ENDPOINT, new Map{ 'clientId' => 'clientId_value', 'clientSecret' => 'clientSecret_value' })); // Act - HttpResponse res = client.post(ENDPOINT, PAYLOAD_REQUEST); + HttpResponse res =(HttpResponse) client.post(ENDPOINT, PAYLOAD_REQUEST); // Assert - System.assert(client.credentials instanceof OAuthProvider); + System.assert(client.credentials instanceof HttpClientProviderOAuth); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); System.assertEquals(2, Limits.getCallouts()); @@ -72,13 +72,13 @@ public class HttpClientTests { // Arange Test.setMock(HttpCalloutMock.class, new HttpClientNamedCredentialsMock('POST')); - HttpClient client = new HttpClient(new NamedCredentialsProvider(AUTH_NAMEDCREDENTIALS_NAME)); + HttpClient client = new HttpClient(new HttpClientProviderNamedCredentials(AUTH_NAMEDCREDENTIALS_NAME)); // Act - HttpResponse res = client.post(ENDPOINT, PAYLOAD_REQUEST); + HttpResponse res = (HttpResponse) client.post(ENDPOINT, PAYLOAD_REQUEST); // Assert - System.assert(client.credentials instanceof NamedCredentialsProvider); + System.assert(client.credentials instanceof HttpClientProviderNamedCredentials); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); } @@ -90,7 +90,7 @@ public class HttpClientTests { HttpClient client = new HttpClient(); // Act - HttpResponse res = client.put(ENDPOINT, PAYLOAD_REQUEST); + HttpResponse res = (HttpResponse) client.put(ENDPOINT, PAYLOAD_REQUEST); // Assert System.assertEquals(null, client.credentials); @@ -103,13 +103,13 @@ public class HttpClientTests { // Arange Test.setMock(HttpCalloutMock.class, new HttpClientBasicMock('PUT')); - HttpClient client = new HttpClient(new BasicProvider(AUTH_BASIC_USERNAME, AUTH_BASIC_PASSWORD)); + HttpClient client = new HttpClient(new HttpClientProviderBasic(AUTH_BASIC_USERNAME, AUTH_BASIC_PASSWORD)); // Act - HttpResponse res = client.put(ENDPOINT, PAYLOAD_REQUEST); + HttpResponse res = (HttpResponse) client.put(ENDPOINT, PAYLOAD_REQUEST); // Assert - System.assert(client.credentials instanceof BasicProvider); + System.assert(client.credentials instanceof HttpClientProviderBasic); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); } @@ -120,16 +120,16 @@ public class HttpClientTests { Test.setMock(HttpCalloutMock.class, new HttpClientOAuthMock('PUT')); HttpClient client = new HttpClient( - new OAuthProvider(AUTH_OAUTH_ENDPOINT, new Map{ + new HttpClientProviderOAuth(AUTH_OAUTH_ENDPOINT, new Map{ 'clientId' => 'clientId_value', 'clientSecret' => 'clientSecret_value' })); // Act - HttpResponse res = client.put(ENDPOINT, PAYLOAD_REQUEST); + HttpResponse res = (HttpResponse) client.put(ENDPOINT, PAYLOAD_REQUEST); // Assert - System.assert(client.credentials instanceof OAuthProvider); + System.assert(client.credentials instanceof HttpClientProviderOAuth); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); System.assertEquals(2, Limits.getCallouts()); @@ -140,13 +140,13 @@ public class HttpClientTests { // Arange Test.setMock(HttpCalloutMock.class, new HttpClientNamedCredentialsMock('PUT')); - HttpClient client = new HttpClient(new NamedCredentialsProvider(AUTH_NAMEDCREDENTIALS_NAME)); + HttpClient client = new HttpClient(new HttpClientProviderNamedCredentials(AUTH_NAMEDCREDENTIALS_NAME)); // Act - HttpResponse res = client.put(ENDPOINT, PAYLOAD_REQUEST); + HttpResponse res = (HttpResponse) client.put(ENDPOINT, PAYLOAD_REQUEST); // Assert - System.assert(client.credentials instanceof NamedCredentialsProvider); + System.assert(client.credentials instanceof HttpClientProviderNamedCredentials); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); } @@ -158,7 +158,7 @@ public class HttpClientTests { HttpClient client = new HttpClient(); // Act - HttpResponse res = client.patch(ENDPOINT, PAYLOAD_REQUEST); + HttpResponse res =(HttpResponse) client.patch(ENDPOINT, PAYLOAD_REQUEST); // Assert System.assertEquals(null, client.credentials); @@ -171,13 +171,13 @@ public class HttpClientTests { // Arange Test.setMock(HttpCalloutMock.class, new HttpClientBasicMock('PATCH')); - HttpClient client = new HttpClient(new BasicProvider(AUTH_BASIC_USERNAME, AUTH_BASIC_PASSWORD)); + HttpClient client = new HttpClient(new HttpClientProviderBasic(AUTH_BASIC_USERNAME, AUTH_BASIC_PASSWORD)); // Act - HttpResponse res = client.patch(ENDPOINT, PAYLOAD_REQUEST); + HttpResponse res = (HttpResponse) client.patch(ENDPOINT, PAYLOAD_REQUEST); // Assert - System.assert(client.credentials instanceof BasicProvider); + System.assert(client.credentials instanceof HttpClientProviderBasic); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); } @@ -188,16 +188,16 @@ public class HttpClientTests { Test.setMock(HttpCalloutMock.class, new HttpClientOAuthMock('PATCH')); HttpClient client = new HttpClient( - new OAuthProvider(AUTH_OAUTH_ENDPOINT, new Map{ + new HttpClientProviderOAuth(AUTH_OAUTH_ENDPOINT, new Map{ 'clientId' => 'clientId_value', 'clientSecret' => 'clientSecret_value' })); // Act - HttpResponse res = client.patch(ENDPOINT, PAYLOAD_REQUEST); + HttpResponse res = (HttpResponse) client.patch(ENDPOINT, PAYLOAD_REQUEST); // Assert - System.assert(client.credentials instanceof OAuthProvider); + System.assert(client.credentials instanceof HttpClientProviderOAuth); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); System.assertEquals(2, Limits.getCallouts()); @@ -208,13 +208,13 @@ public class HttpClientTests { // Arange Test.setMock(HttpCalloutMock.class, new HttpClientNamedCredentialsMock('PATCH')); - HttpClient client = new HttpClient(new NamedCredentialsProvider(AUTH_NAMEDCREDENTIALS_NAME)); + HttpClient client = new HttpClient(new HttpClientProviderNamedCredentials(AUTH_NAMEDCREDENTIALS_NAME)); // Act - HttpResponse res = client.patch(ENDPOINT, PAYLOAD_REQUEST); + HttpResponse res = (HttpResponse) client.patch(ENDPOINT, PAYLOAD_REQUEST); // Assert - System.assert(client.credentials instanceof NamedCredentialsProvider); + System.assert(client.credentials instanceof HttpClientProviderNamedCredentials); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); } @@ -226,7 +226,7 @@ public class HttpClientTests { HttpClient client = new HttpClient(); // Act - HttpResponse res = client.get(ENDPOINT); + HttpResponse res = (HttpResponse) client.get(ENDPOINT); // Assert System.assertEquals(null, client.credentials); @@ -239,13 +239,13 @@ public class HttpClientTests { // Arange Test.setMock(HttpCalloutMock.class, new HttpClientBasicMock('GET')); - HttpClient client = new HttpClient(new BasicProvider(AUTH_BASIC_USERNAME, AUTH_BASIC_PASSWORD)); + HttpClient client = new HttpClient(new HttpClientProviderBasic(AUTH_BASIC_USERNAME, AUTH_BASIC_PASSWORD)); // Act - HttpResponse res = client.get(ENDPOINT); + HttpResponse res = (HttpResponse) client.get(ENDPOINT); // Assert - System.assert(client.credentials instanceof BasicProvider); + System.assert(client.credentials instanceof HttpClientProviderBasic); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); } @@ -256,16 +256,16 @@ public class HttpClientTests { Test.setMock(HttpCalloutMock.class, new HttpClientOAuthMock('GET')); HttpClient client = new HttpClient( - new OAuthProvider(AUTH_OAUTH_ENDPOINT, new Map{ + new HttpClientProviderOAuth(AUTH_OAUTH_ENDPOINT, new Map{ 'clientId' => 'clientId_value', 'clientSecret' => 'clientSecret_value' })); // Act - HttpResponse res = client.get(ENDPOINT); + HttpResponse res = (HttpResponse) client.get(ENDPOINT); // Assert - System.assert(client.credentials instanceof OAuthProvider); + System.assert(client.credentials instanceof HttpClientProviderOAuth); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); System.assertEquals(2, Limits.getCallouts()); @@ -276,13 +276,13 @@ public class HttpClientTests { // Arange Test.setMock(HttpCalloutMock.class, new HttpClientNamedCredentialsMock('GET')); - HttpClient client = new HttpClient(new NamedCredentialsProvider(AUTH_NAMEDCREDENTIALS_NAME)); + HttpClient client = new HttpClient(new HttpClientProviderNamedCredentials(AUTH_NAMEDCREDENTIALS_NAME)); // Act - HttpResponse res = client.get(ENDPOINT); + HttpResponse res = (HttpResponse) client.get(ENDPOINT); // Assert - System.assert(client.credentials instanceof NamedCredentialsProvider); + System.assert(client.credentials instanceof HttpClientProviderNamedCredentials); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); } @@ -294,7 +294,7 @@ public class HttpClientTests { HttpClient client = new HttpClient(); // Act - HttpResponse res = client.del(ENDPOINT); + HttpResponse res = (HttpResponse) client.del(ENDPOINT); // Assert System.assertEquals(null, client.credentials); @@ -307,13 +307,13 @@ public class HttpClientTests { // Arange Test.setMock(HttpCalloutMock.class, new HttpClientBasicMock('DELETE')); - HttpClient client = new HttpClient(new BasicProvider(AUTH_BASIC_USERNAME, AUTH_BASIC_PASSWORD)); + HttpClient client = new HttpClient(new HttpClientProviderBasic(AUTH_BASIC_USERNAME, AUTH_BASIC_PASSWORD)); // Act - HttpResponse res = client.del(ENDPOINT); + HttpResponse res = (HttpResponse) client.del(ENDPOINT); // Assert - System.assert(client.credentials instanceof BasicProvider); + System.assert(client.credentials instanceof HttpClientProviderBasic); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); } @@ -324,16 +324,16 @@ public class HttpClientTests { Test.setMock(HttpCalloutMock.class, new HttpClientOAuthMock('DELETE')); HttpClient client = new HttpClient( - new OAuthProvider(AUTH_OAUTH_ENDPOINT, new Map{ + new HttpClientProviderOAuth(AUTH_OAUTH_ENDPOINT, new Map{ 'clientId' => 'clientId_value', 'clientSecret' => 'clientSecret_value' })); // Act - HttpResponse res = client.del(ENDPOINT); + HttpResponse res =(HttpResponse) client.del(ENDPOINT); // Assert - System.assert(client.credentials instanceof OAuthProvider); + System.assert(client.credentials instanceof HttpClientProviderOAuth); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); System.assertEquals(2, Limits.getCallouts()); @@ -344,13 +344,13 @@ public class HttpClientTests { // Arange Test.setMock(HttpCalloutMock.class, new HttpClientNamedCredentialsMock('DELETE')); - HttpClient client = new HttpClient(new NamedCredentialsProvider(AUTH_NAMEDCREDENTIALS_NAME)); + HttpClient client = new HttpClient(new HttpClientProviderNamedCredentials(AUTH_NAMEDCREDENTIALS_NAME)); // Act - HttpResponse res = client.del(ENDPOINT); + HttpResponse res = (HttpResponse) client.del(ENDPOINT); // Assert - System.assert(client.credentials instanceof NamedCredentialsProvider); + System.assert(client.credentials instanceof HttpClientProviderNamedCredentials); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); } @@ -362,7 +362,7 @@ public class HttpClientTests { HttpClient client = new HttpClient(); // Act - HttpResponse res = client.head(ENDPOINT); + HttpResponse res = (HttpResponse) client.head(ENDPOINT); // Assert System.assertEquals(null, client.credentials); @@ -375,13 +375,13 @@ public class HttpClientTests { // Arange Test.setMock(HttpCalloutMock.class, new HttpClientBasicMock('HEAD')); - HttpClient client = new HttpClient(new BasicProvider(AUTH_BASIC_USERNAME, AUTH_BASIC_PASSWORD)); + HttpClient client = new HttpClient(new HttpClientProviderBasic(AUTH_BASIC_USERNAME, AUTH_BASIC_PASSWORD)); // Act - HttpResponse res = client.head(ENDPOINT); + HttpResponse res = (HttpResponse) client.head(ENDPOINT); // Assert - System.assert(client.credentials instanceof BasicProvider); + System.assert(client.credentials instanceof HttpClientProviderBasic); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); } @@ -392,16 +392,16 @@ public class HttpClientTests { Test.setMock(HttpCalloutMock.class, new HttpClientOAuthMock('HEAD')); HttpClient client = new HttpClient( - new OAuthProvider(AUTH_OAUTH_ENDPOINT, new Map{ + new HttpClientProviderOAuth(AUTH_OAUTH_ENDPOINT, new Map{ 'clientId' => 'clientId_value', 'clientSecret' => 'clientSecret_value' })); // Act - HttpResponse res = client.head(ENDPOINT); + HttpResponse res = (HttpResponse) client.head(ENDPOINT); // Assert - System.assert(client.credentials instanceof OAuthProvider); + System.assert(client.credentials instanceof HttpClientProviderOAuth); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); System.assertEquals(2, Limits.getCallouts()); @@ -412,13 +412,13 @@ public class HttpClientTests { // Arange Test.setMock(HttpCalloutMock.class, new HttpClientNamedCredentialsMock('HEAD')); - HttpClient client = new HttpClient(new NamedCredentialsProvider(AUTH_NAMEDCREDENTIALS_NAME)); + HttpClient client = new HttpClient(new HttpClientProviderNamedCredentials(AUTH_NAMEDCREDENTIALS_NAME)); // Act - HttpResponse res = client.head(ENDPOINT); + HttpResponse res = (HttpResponse) client.head(ENDPOINT); // Assert - System.assert(client.credentials instanceof NamedCredentialsProvider); + System.assert(client.credentials instanceof HttpClientProviderNamedCredentials); System.assertEquals(PAYLOAD_RESPONSE, res.getBody()); System.assertEquals(200, res.getStatusCode()); } diff --git a/src/classes/HttpClientTests.cls-meta.xml b/src/classes/HttpClientTests.cls-meta.xml old mode 100644 new mode 100755 diff --git a/src/classes/ICredentialsProvider.cls b/src/classes/ICredentialsProvider.cls deleted file mode 100644 index f31c64d..0000000 --- a/src/classes/ICredentialsProvider.cls +++ /dev/null @@ -1,3 +0,0 @@ -public interface ICredentialsProvider { - String getHeader(); -} \ No newline at end of file diff --git a/src/package.xml b/src/package.xml index d184d1e..528612c 100644 --- a/src/package.xml +++ b/src/package.xml @@ -1,17 +1,22 @@ - HttpClient HttpCalloutException - ICredentialsProvider - BasicProvider - OAuthProvider - NamedCredentialsProvider - HttpClientTests - HttpClientMock - HttpClientOAuthMock + HttpClient + HttpClientAura HttpClientBasicMock + HttpClientMock + NamedCredentialsProvider HttpClientNamedCredentialsMock + HttpClientOAuthMock + HttpClientProviderAuthProvider + HttpClientProviderBasic + HttpClientProviderBearer + HttpClientProviderCookie + HttpClientProviderInterface + HttpClientProviderNamedCredentials + HttpClientProviderOAuth + HttpClientTests ApexClass 43.0 diff --git a/src/pages/HttpClientProviderSelf.page b/src/pages/HttpClientProviderSelf.page new file mode 100644 index 0000000..ed6e398 --- /dev/null +++ b/src/pages/HttpClientProviderSelf.page @@ -0,0 +1,3 @@ + + {!$Api.Session_ID + ';' + salesforceBaseUrl} + \ No newline at end of file diff --git a/src/pages/HttpClientProviderSelf.page-meta.xml b/src/pages/HttpClientProviderSelf.page-meta.xml new file mode 100644 index 0000000..4c4c0cf --- /dev/null +++ b/src/pages/HttpClientProviderSelf.page-meta.xml @@ -0,0 +1,5 @@ + + + 43.0 + +