Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 21 additions & 11 deletions APIMatic.Core.Test/AuthenticationTest.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using APIMatic.Core.Authentication;
using APIMatic.Core.Test.MockTypes.Authentication;
using APIMatic.Core.Types.Sdk.Exceptions;
Expand All @@ -12,7 +13,7 @@ namespace APIMatic.Core.Test
public class AuthenticationTest : TestBase
{
[Test]
public void Multiple_Authentication_Success_WithFirstAuth()
public async Task Multiple_Authentication_Success_WithFirstAuth()
{
var globalConfiguration = new GlobalConfiguration.Builder()
.ServerUrls(new Dictionary<Enum, string>
Expand All @@ -28,7 +29,7 @@ public void Multiple_Authentication_Success_WithFirstAuth()
.HttpConfiguration(_clientConfiguration)
.Build();

var request = globalConfiguration.GlobalRequestBuilder()
var request = await globalConfiguration.GlobalRequestBuilder()
.Setup(HttpMethod.Get, "/auth")
.WithOrAuth(auth => auth
.AddAndGroup(innerGroup => innerGroup
Expand All @@ -45,7 +46,7 @@ public void Multiple_Authentication_Success_WithFirstAuth()
}

[Test]
public void Multiple_Authentication_Success_WithSecondAuth()
public async Task Multiple_Authentication_Success_WithSecondAuth()
{
var basicAuthManager = new BasicAuthManager("username", "password");
var globalConfiguration = new GlobalConfiguration.Builder()
Expand All @@ -62,7 +63,7 @@ public void Multiple_Authentication_Success_WithSecondAuth()
.HttpConfiguration(_clientConfiguration)
.Build();

var request = globalConfiguration.GlobalRequestBuilder()
var request = await globalConfiguration.GlobalRequestBuilder()
.Setup(HttpMethod.Get, "/auth")
.WithOrAuth(auth => auth
.AddAndGroup(innerGroup => innerGroup
Expand Down Expand Up @@ -95,7 +96,7 @@ public void Multiple_Authentication_OR_Validation_Failure()
.HttpConfiguration(_clientConfiguration)
.Build();

var exp = Assert.Throws<AuthValidationException>(() => globalConfiguration.GlobalRequestBuilder()
var exp = Assert.ThrowsAsync<AuthValidationException>(() => globalConfiguration.GlobalRequestBuilder()
.Setup(HttpMethod.Get, "/auth")
.WithOrAuth(auth => auth
.Add("basic")
Expand All @@ -110,7 +111,7 @@ public void Multiple_Authentication_OR_Validation_Failure()
}

[Test]
public void Multiple_Authentication_AND_Validation_Failure()
public async Task Multiple_Authentication_AND_Validation_Failure()
{
var globalConfiguration = new GlobalConfiguration.Builder()
.ServerUrls(new Dictionary<Enum, string>
Expand All @@ -126,15 +127,24 @@ public void Multiple_Authentication_AND_Validation_Failure()
.HttpConfiguration(_clientConfiguration)
.Build();

var exp = Assert.Throws<AuthValidationException>(() => globalConfiguration.GlobalRequestBuilder()

var exp = Assert.ThrowsAsync<AuthValidationException>(() => globalConfiguration.GlobalRequestBuilder()
.Setup(HttpMethod.Get, "/auth")
.WithAndAuth(auth => auth
.Add("query")
.WithAndAuth(auth => auth.Add("query")
.Add("header"))
.Build());

Assert.AreEqual("Following authentication credentials are required:\n" +
"-> Missing required header field: TOKEN", exp.Message);

async void AuthCode()
{
await globalConfiguration.GlobalRequestBuilder()
.Setup(HttpMethod.Get, "/auth")
.WithAndAuth(auth => auth.Add("query")
.Add("header"))
.Build();
}
}

[Test]
Expand All @@ -153,7 +163,7 @@ public void Multiple_Authentication_AND_All_Missing_Validation_Failure()
.HttpConfiguration(_clientConfiguration)
.Build();

var exp = Assert.Throws<AuthValidationException>(() => globalConfiguration.GlobalRequestBuilder()
var exp = Assert.ThrowsAsync<AuthValidationException>(() => globalConfiguration.GlobalRequestBuilder()
.Setup(HttpMethod.Get, "/auth")
.WithAndAuth(auth => auth
.Add("query")
Expand Down Expand Up @@ -184,7 +194,7 @@ public void Multiple_Authentication_AND_with_nested_OR_Validation_Failure()
.HttpConfiguration(_clientConfiguration)
.Build();

var exp = Assert.Throws<AuthValidationException>(() => globalConfiguration.GlobalRequestBuilder()
var exp = Assert.ThrowsAsync<AuthValidationException>(() => globalConfiguration.GlobalRequestBuilder()
.Setup(HttpMethod.Get, "/auth")
.WithAndAuth(auth => auth
.Add("query")
Expand Down
15 changes: 8 additions & 7 deletions APIMatic.Core.Test/GlobalConfigurationTest.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using APIMatic.Core.Http.Configuration;
using NUnit.Framework;

Expand All @@ -19,19 +20,19 @@ public void TestServerUrl()
}

[Test]
public void TestGlobalRequestQueryUrl()
public async Task TestGlobalRequestQueryUrl()
{
var request = LazyGlobalConfiguration.Value.GlobalRequestBuilder().Build();
var request = await LazyGlobalConfiguration.Value.GlobalRequestBuilder().Build();
Assert.AreEqual("http://my/path:3000/v1", request.QueryUrl);

var request2 = LazyGlobalConfiguration.Value.GlobalRequestBuilder(MockServer.Server2).Build();
var request2 = await LazyGlobalConfiguration.Value.GlobalRequestBuilder(MockServer.Server2).Build();
Assert.AreEqual("https://my/path/v2", request2.QueryUrl);
}

[Test]
public void TestGlobalRequestHeaders()
public async Task TestGlobalRequestHeaders()
{
var request = LazyGlobalConfiguration.Value.GlobalRequestBuilder().Build();
var request = await LazyGlobalConfiguration.Value.GlobalRequestBuilder().Build();
Assert.True(request.Headers.Count == 5);
Assert.AreEqual("headVal1", request.Headers["additionalHead1"]);
Assert.AreEqual("headVal2", request.Headers["additionalHead2"]);
Expand All @@ -41,10 +42,10 @@ public void TestGlobalRequestHeaders()
}

[Test]
public void TestGlobalRequest_NullUserAgent()
public async Task TestGlobalRequest_NullUserAgent()
{
var httpClientConfiguration = new CoreHttpClientConfiguration.Builder().Build();
var request = new GlobalConfiguration.Builder()
var request = await new GlobalConfiguration.Builder()
.HttpConfiguration(httpClientConfiguration)
.UserAgent(null)
.ServerUrls(new Dictionary<Enum, string>
Expand Down
28 changes: 14 additions & 14 deletions APIMatic.Core.Test/Http/HttpClientWrapperSSLTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,21 @@
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using APIMatic.Core.Http.Configuration;
using APIMatic.Core.Http.Configuration;
using NUnit.Framework;

namespace APIMatic.Core.Test.Http
{
[TestFixture]
public class HttpClientWrapperSSLTest : TestBase
{
private readonly string expiredSSLCertUrl = "https://expired.badssl.com/";
private readonly string expiredSSLCertUrl = "https://expired.badssl.com/";

[Test]
public void TestHttpClientSSLCertificateVerification_ExceptionResponse()
{
var expectedValue = "The SSL connection could not be established, see inner exception.";
var clientConfiguration = new CoreHttpClientConfiguration.Builder()
public async Task TestHttpClientSSLCertificateVerification_ExceptionResponse()
{
var expectedValue = "The SSL connection could not be established, see inner exception.";
var clientConfiguration = new CoreHttpClientConfiguration.Builder()
.Build();

var config = new GlobalConfiguration.Builder()
Expand All @@ -31,20 +31,20 @@ public void TestHttpClientSSLCertificateVerification_ExceptionResponse()

var client = config.HttpClient;

var request = config.GlobalRequestBuilder()
var request = await config.GlobalRequestBuilder()
.Setup(HttpMethod.Get, string.Empty)
.Build();

// Act
var ex = Assert.ThrowsAsync<HttpRequestException>(() => client.ExecuteAsync(request));
Assert.AreEqual(expectedValue, ex.Message);
}
}

[Test]
public async Task TestHttpClientSkipSSLCertificateVerification_OKResponse()
{
var clientConfiguration = new CoreHttpClientConfiguration.Builder()
.SkipSslCertVerification(true)
{
var clientConfiguration = new CoreHttpClientConfiguration.Builder()
.SkipSslCertVerification(true)
.Build();

var config = new GlobalConfiguration.Builder()
Expand All @@ -58,7 +58,7 @@ public async Task TestHttpClientSkipSSLCertificateVerification_OKResponse()

var client = config.HttpClient;

var request = config.GlobalRequestBuilder()
var request = await config.GlobalRequestBuilder()
.Setup(HttpMethod.Get, string.Empty)
.Build();

Expand Down
6 changes: 3 additions & 3 deletions APIMatic.Core.Test/Http/HttpClientWrapperTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public void SetupHttpClient()
[Test]
public async Task HttpClient_GetCall_200Response()
{
var request = _config.GlobalRequestBuilder()
var request = await _config.GlobalRequestBuilder()
.Setup(HttpMethod.Get, "/httpclient/get/200")
.Parameters(p => p
.Body(b => b.Setup("Get Response")))
Expand All @@ -60,7 +60,7 @@ public async Task HttpClient_GetCall_200Response()
[Test]
public async Task TestHttpClientGetCall_400Response()
{
var request = _config.GlobalRequestBuilder()
var request = await _config.GlobalRequestBuilder()
.Setup(HttpMethod.Get, "/httpclient/get/400")
.Parameters(p => p
.Body(b => b.Setup("Get Bad Request")))
Expand All @@ -84,7 +84,7 @@ public async Task TestHttpClientGetCall_200Response()
var customHeaderKey = "Custom-Headder";
var customHeaderValue = "customHeader";

var request = _config.GlobalRequestBuilder()
var request = await _config.GlobalRequestBuilder()
.Setup(HttpMethod.Get, "/httpclient/get-combined-headers/200")
.Build();

Expand Down
2 changes: 1 addition & 1 deletion APIMatic.Core/ApiCall.cs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ public ApiCall<Request, Response, Context, ApiException, ReturnType, ResponseTyp
public async Task<ReturnType> ExecuteAsync(CancellationToken cancellationToken = default)
{
requestBuilder.AcceptHeader = responseHandler.AcceptHeader;
CoreRequest request = requestBuilder.Build();
CoreRequest request = await requestBuilder.Build();
globalConfiguration.ApiCallback?.OnBeforeHttpRequestEventHandler(request);
_sdkLogger.LogRequest(request);
CoreResponse response = await globalConfiguration.HttpClient.ExecuteAsync(request, cancellationToken).ConfigureAwait(false);
Expand Down
8 changes: 6 additions & 2 deletions APIMatic.Core/Authentication/AuthGroupBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using APIMatic.Core.Request;
using APIMatic.Core.Types.Sdk.Exceptions;

Expand Down Expand Up @@ -112,10 +113,13 @@ public override void Validate()
/// Add authentication group information to the RequestBuilder.
/// </summary>
/// <param name="requestBuilder">The RequestBuilder object on which authentication will be applied.</param>
internal override void Apply(RequestBuilder requestBuilder)
public override async Task Apply(RequestBuilder requestBuilder)
{
Validate();
validatedAuthManagers.ForEach(authManager => authManager.Apply(requestBuilder));
foreach (var authManager in validatedAuthManagers)
{
await authManager.Apply(requestBuilder);
}
}
}
}
4 changes: 3 additions & 1 deletion APIMatic.Core/Authentication/AuthManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// Copyright (c) APIMatic. All rights reserved.
// </copyright>
using System;
using System.Threading.Tasks;
using APIMatic.Core.Request;
using APIMatic.Core.Request.Parameters;

Expand Down Expand Up @@ -37,10 +38,11 @@ public virtual void Validate()
/// Add authentication information to the HTTP Request.
/// </summary>
/// <param name="requestBuilder">The http request object on which authentication will be applied.</param>
internal virtual void Apply(RequestBuilder requestBuilder)
public virtual Task Apply(RequestBuilder requestBuilder)
{
Validate();
parameters.Apply(requestBuilder);
return Task.CompletedTask;
}
}
}
5 changes: 3 additions & 2 deletions APIMatic.Core/Request/RequestBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using APIMatic.Core.Authentication;
using APIMatic.Core.Http.Configuration;
using APIMatic.Core.Request.Parameters;
Expand Down Expand Up @@ -145,11 +146,11 @@ public RequestBuilder XmlBodySerializer(Func<dynamic, object> xmlSerializer)
/// This applies all the configuration and build an instance of CoreRequest
/// </summary>
/// <returns></returns>
public CoreRequest Build()
public async Task<CoreRequest> Build()
{
parameters.Validate().Apply(this);
configuration.RuntimeParameters.Validate().Apply(this);
authGroup.Apply(this);
await authGroup.Apply(this);
CoreHelper.AppendUrlWithQueryParameters(QueryUrl, queryParameters, ArraySerialization);
body = bodyParameters.Any() ? bodyParameters : body;
AppendContentTypeHeader();
Expand Down