diff --git a/MessagingService.Client/IMessagingServiceClient.cs b/MessagingService.Client/IMessagingServiceClient.cs
new file mode 100644
index 0000000..afdf211
--- /dev/null
+++ b/MessagingService.Client/IMessagingServiceClient.cs
@@ -0,0 +1,28 @@
+namespace MessagingService.Client
+{
+ using System;
+ using System.Threading;
+ using System.Threading.Tasks;
+ using DataTransferObjects;
+
+ ///
+ ///
+ ///
+ public interface IMessagingServiceClient
+ {
+ #region Methods
+
+ ///
+ /// Sends the email.
+ ///
+ /// The access token.
+ /// The request.
+ /// The cancellation token.
+ ///
+ Task SendEmail(String accessToken,
+ SendEmailRequest request,
+ CancellationToken cancellationToken);
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/MessagingService.Client/MessagingService.Client.csproj b/MessagingService.Client/MessagingService.Client.csproj
new file mode 100644
index 0000000..aeb7a33
--- /dev/null
+++ b/MessagingService.Client/MessagingService.Client.csproj
@@ -0,0 +1,20 @@
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MessagingService.Client/MessagingServiceClient.cs b/MessagingService.Client/MessagingServiceClient.cs
new file mode 100644
index 0000000..c65db28
--- /dev/null
+++ b/MessagingService.Client/MessagingServiceClient.cs
@@ -0,0 +1,114 @@
+namespace MessagingService.Client
+{
+ using System;
+ using System.Net.Http;
+ using System.Net.Http.Headers;
+ using System.Text;
+ using System.Threading;
+ using System.Threading.Tasks;
+ using ClientProxyBase;
+ using DataTransferObjects;
+ using Newtonsoft.Json;
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ public class MessagingServiceClient : ClientProxyBase, IMessagingServiceClient
+ {
+ #region Fields
+
+ ///
+ /// The base address
+ ///
+ private readonly String BaseAddress;
+
+ ///
+ /// The base address resolver
+ ///
+ private readonly Func BaseAddressResolver;
+
+ #endregion
+
+ #region Constructors
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The base address resolver.
+ /// The HTTP client.
+ public MessagingServiceClient(Func baseAddressResolver,
+ HttpClient httpClient) : base(httpClient)
+ {
+ this.BaseAddressResolver = baseAddressResolver;
+
+ // Add the API version header
+ this.HttpClient.DefaultRequestHeaders.Add("api-version", "1.0");
+ }
+
+ #endregion
+
+ #region Methods
+
+ ///
+ /// Sends the email.
+ ///
+ /// The access token.
+ /// The send email request.
+ /// The cancellation token.
+ ///
+ public async Task SendEmail(String accessToken,
+ SendEmailRequest sendEmailRequest,
+ CancellationToken cancellationToken)
+ {
+ SendEmailResponse response = null;
+
+ String requestUri = this.BuildRequestUrl("/api/email/");
+
+ try
+ {
+ String requestSerialised = JsonConvert.SerializeObject(sendEmailRequest);
+
+ StringContent httpContent = new StringContent(requestSerialised, Encoding.UTF8, "application/json");
+
+ // Add the access token to the client headers
+ this.HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
+
+ // Make the Http Call here
+ HttpResponseMessage httpResponse = await this.HttpClient.PostAsync(requestUri, httpContent, cancellationToken);
+
+ // Process the response
+ String content = await this.HandleResponse(httpResponse, cancellationToken);
+
+ // call was successful so now deserialise the body to the response object
+ response = JsonConvert.DeserializeObject(content);
+ }
+ catch(Exception ex)
+ {
+ // An exception has occurred, add some additional information to the message
+ Exception exception = new Exception("Error sending email message.", ex);
+
+ throw exception;
+ }
+
+ return response;
+ }
+
+ ///
+ /// Builds the request URL.
+ ///
+ /// The route.
+ ///
+ private String BuildRequestUrl(String route)
+ {
+ String baseAddress = this.BaseAddressResolver("MessagingServiceApi");
+
+ String requestUri = $"{baseAddress}{route}";
+
+ return requestUri;
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/MessagingService.IntegrationTests/Common/DockerHelper.cs b/MessagingService.IntegrationTests/Common/DockerHelper.cs
index e6d169f..764cf84 100644
--- a/MessagingService.IntegrationTests/Common/DockerHelper.cs
+++ b/MessagingService.IntegrationTests/Common/DockerHelper.cs
@@ -5,6 +5,7 @@
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
+ using Client;
using Ductus.FluentDocker.Builders;
using Ductus.FluentDocker.Common;
using Ductus.FluentDocker.Model.Builders;
@@ -26,7 +27,10 @@ public class DockerHelper : global::Shared.IntegrationTesting.DockerHelper
///
public ISecurityServiceClient SecurityServiceClient;
- public HttpClient MessagingServiceClient;
+ ///
+ /// The messaging service client
+ ///
+ public IMessagingServiceClient MessagingServiceClient;
///
/// The test identifier
@@ -166,12 +170,11 @@ public override async Task StartContainersForScenarioRun(String scenarioName)
// Setup the base address resolvers
String SecurityServiceBaseAddressResolver(String api) => $"http://127.0.0.1:{this.SecurityServicePort}";
+ String MessagingServiceBaseAddressResolver(String api) => $"http://127.0.0.1:{this.MessagingServicePort}";
HttpClient httpClient = new HttpClient();
this.SecurityServiceClient = new SecurityServiceClient(SecurityServiceBaseAddressResolver, httpClient);
-
- this.MessagingServiceClient = new HttpClient();
- this.MessagingServiceClient.BaseAddress = new Uri($"http://127.0.0.1:{this.MessagingServicePort}");
+ this.MessagingServiceClient = new MessagingServiceClient(MessagingServiceBaseAddressResolver, httpClient);
}
///
diff --git a/MessagingService.IntegrationTests/Email/SendEmailSteps.cs b/MessagingService.IntegrationTests/Email/SendEmailSteps.cs
index b1677a7..554d951 100644
--- a/MessagingService.IntegrationTests/Email/SendEmailSteps.cs
+++ b/MessagingService.IntegrationTests/Email/SendEmailSteps.cs
@@ -56,18 +56,10 @@ private async Task SendEmail(TableRow tableRow)
Subject = subject,
ToAddresses = toAddresses.Split(",").ToList()
};
-
- StringContent requestContent = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");
- this.TestingContext.DockerHelper.MessagingServiceClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", this.TestingContext.AccessToken);
- HttpResponseMessage httpResponse = await this.TestingContext.DockerHelper.MessagingServiceClient.PostAsync("api/Email", requestContent, CancellationToken.None).ConfigureAwait(false);
-
- httpResponse.StatusCode.ShouldBe(HttpStatusCode.Created);
- String responseContent = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ SendEmailResponse sendEmailResponse = await this.TestingContext.DockerHelper.MessagingServiceClient.SendEmail(this.TestingContext.AccessToken, request, CancellationToken.None).ConfigureAwait(false);
- responseContent.ShouldNotBeNullOrEmpty();
- SendEmailResponse response = JsonConvert.DeserializeObject(responseContent);
- response.MessageId.ShouldNotBe(Guid.Empty);
+ sendEmailResponse.MessageId.ShouldNotBe(Guid.Empty);
}
}
}
diff --git a/MessagingService.IntegrationTests/MessagingService.IntegrationTests.csproj b/MessagingService.IntegrationTests/MessagingService.IntegrationTests.csproj
index 89de71e..c181ff1 100644
--- a/MessagingService.IntegrationTests/MessagingService.IntegrationTests.csproj
+++ b/MessagingService.IntegrationTests/MessagingService.IntegrationTests.csproj
@@ -7,7 +7,7 @@
-
+
@@ -27,6 +27,7 @@
+
diff --git a/MessagingService.sln b/MessagingService.sln
index caa08cd..a1d699b 100644
--- a/MessagingService.sln
+++ b/MessagingService.sln
@@ -25,7 +25,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MessagingService.BusinessLo
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MessagingService.EmailAggregate.Tests", "MessagingService.EmailAggregate.Tests\MessagingService.EmailAggregate.Tests.csproj", "{2FBED4B6-3096-4AD1-8436-247A59E0CDC2}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessagingService.IntegrationTests", "MessagingService.IntegrationTests\MessagingService.IntegrationTests.csproj", "{FEBD44D2-5B93-40D8-B59C-E5221570055D}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MessagingService.IntegrationTests", "MessagingService.IntegrationTests\MessagingService.IntegrationTests.csproj", "{FEBD44D2-5B93-40D8-B59C-E5221570055D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessagingService.Client", "MessagingService.Client\MessagingService.Client.csproj", "{E1F3FEA4-3358-429F-B3CF-FD7E15EDB993}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -73,6 +75,10 @@ Global
{FEBD44D2-5B93-40D8-B59C-E5221570055D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FEBD44D2-5B93-40D8-B59C-E5221570055D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FEBD44D2-5B93-40D8-B59C-E5221570055D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E1F3FEA4-3358-429F-B3CF-FD7E15EDB993}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E1F3FEA4-3358-429F-B3CF-FD7E15EDB993}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E1F3FEA4-3358-429F-B3CF-FD7E15EDB993}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E1F3FEA4-3358-429F-B3CF-FD7E15EDB993}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -88,6 +94,7 @@ Global
{17A755D6-96EE-46EB-8850-9641B8F1A5E1} = {9AEE6ADE-DD45-4605-A933-E06CF0BA4203}
{2FBED4B6-3096-4AD1-8436-247A59E0CDC2} = {9AEE6ADE-DD45-4605-A933-E06CF0BA4203}
{FEBD44D2-5B93-40D8-B59C-E5221570055D} = {9AEE6ADE-DD45-4605-A933-E06CF0BA4203}
+ {E1F3FEA4-3358-429F-B3CF-FD7E15EDB993} = {BF2482A1-13C0-4305-B732-AB62EBD9429B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1929C0FE-8CEB-4D0E-BD22-9E5E16E2B49F}