diff --git a/CallbackHandler.BusinessLogic.Tests/CallbackHandler.BusinessLogic.Tests.csproj b/CallbackHandler.BusinessLogic.Tests/CallbackHandler.BusinessLogic.Tests.csproj index aabe68a..b84ce9d 100644 --- a/CallbackHandler.BusinessLogic.Tests/CallbackHandler.BusinessLogic.Tests.csproj +++ b/CallbackHandler.BusinessLogic.Tests/CallbackHandler.BusinessLogic.Tests.csproj @@ -30,6 +30,7 @@ + diff --git a/CallbackHandler.BusinessLogic.Tests/Mediator/DummyCallbackDomainService.cs b/CallbackHandler.BusinessLogic.Tests/Mediator/DummyCallbackDomainService.cs new file mode 100644 index 0000000..566b461 --- /dev/null +++ b/CallbackHandler.BusinessLogic.Tests/Mediator/DummyCallbackDomainService.cs @@ -0,0 +1,19 @@ +namespace CallbackHandler.BusinessLogic.Tests.Mediator; + +using System; +using System.Threading; +using System.Threading.Tasks; +using BusinessLogic.Services; +using CallbackHandlers.Models; + +public class DummyCallbackDomainService : ICallbackDomainService +{ + public async Task RecordCallback(Guid callbackId, + String typeString, + MessageFormat messageFormat, + String callbackMessage, + String reference, + String[] destinations, + CancellationToken cancellationToken) { + } +} \ No newline at end of file diff --git a/CallbackHandler.BusinessLogic.Tests/Mediator/MediatorTests.cs b/CallbackHandler.BusinessLogic.Tests/Mediator/MediatorTests.cs index 26da5cf..a6ca824 100644 --- a/CallbackHandler.BusinessLogic.Tests/Mediator/MediatorTests.cs +++ b/CallbackHandler.BusinessLogic.Tests/Mediator/MediatorTests.cs @@ -1,12 +1,103 @@ -using System; +using CallbackHander.Testing; +using MediatR; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; +using Moq; +using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; +using Xunit; namespace CallbackHandler.BusinessLogic.Tests.Mediator { - internal class MediatorTests + using BusinessLogic.Services; + using Lamar; + using Microsoft.Extensions.DependencyInjection; + + public class MediatorTests { + private List Requests = new List(); + + public MediatorTests() + { + this.Requests.Add(TestData.RecordCallbackRequest); + } + + [Fact] + public async Task Mediator_Send_RequestHandled() + { + Mock hostingEnvironment = new Mock(); + hostingEnvironment.Setup(he => he.EnvironmentName).Returns("Development"); + hostingEnvironment.Setup(he => he.ContentRootPath).Returns("/home"); + hostingEnvironment.Setup(he => he.ApplicationName).Returns("Test Application"); + + ServiceRegistry services = new ServiceRegistry(); + Startup s = new Startup(hostingEnvironment.Object); + Startup.Configuration = this.SetupMemoryConfiguration(); + + this.AddTestRegistrations(services, hostingEnvironment.Object); + s.ConfigureContainer(services); + Startup.Container.AssertConfigurationIsValid(AssertMode.Full); + + List errors = new List(); + IMediator mediator = Startup.Container.GetService(); + foreach (IBaseRequest baseRequest in this.Requests) + { + try + { + await mediator.Send(baseRequest); + } + catch (Exception ex) + { + errors.Add(ex.Message); + } + } + + if (errors.Any() == true) + { + String errorMessage = String.Join(Environment.NewLine, errors); + throw new Exception(errorMessage); + } + } + + private IConfigurationRoot SetupMemoryConfiguration() + { + Dictionary configuration = new Dictionary(); + + IConfigurationBuilder builder = new ConfigurationBuilder(); + + configuration.Add("ConnectionStrings:HealthCheck", "HeathCheckConnString"); + configuration.Add("SecurityConfiguration:Authority", "https://127.0.0.1"); + configuration.Add("EventStoreSettings:ConnectionString", "https://127.0.0.1:2113"); + configuration.Add("EventStoreSettings:ConnectionName", "UnitTestConnection"); + configuration.Add("EventStoreSettings:UserName", "admin"); + configuration.Add("EventStoreSettings:Password", "changeit"); + configuration.Add("AppSettings:UseConnectionStringConfig", "false"); + configuration.Add("AppSettings:SecurityService", "http://127.0.0.1"); + configuration.Add("AppSettings:MessagingServiceApi", "http://127.0.0.1"); + configuration.Add("AppSettings:DatabaseEngine", "SqlServer"); + + builder.AddInMemoryCollection(configuration); + + return builder.Build(); + } + + private void AddTestRegistrations(ServiceRegistry services, + IWebHostEnvironment hostingEnvironment) + { + services.AddLogging(); + DiagnosticListener diagnosticSource = new DiagnosticListener(hostingEnvironment.ApplicationName); + services.AddSingleton(diagnosticSource); + services.AddSingleton(diagnosticSource); + services.AddSingleton(hostingEnvironment); + services.AddSingleton(hostingEnvironment); + services.AddSingleton(Startup.Configuration); + + services.OverrideServices(s => { s.AddSingleton(); }); + } } }