Skip to content
This repository was archived by the owner on Jun 16, 2023. It is now read-only.
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
namespace VoucherManagementACL.BusinessLogic.Tests;

using System;
using System.Threading;
using System.Threading.Tasks;
using Models;
using Services;

public class DummyVoucherManagementACLApplicationService : IVoucherManagementACLApplicationService
{
public async Task<GetVoucherResponse> GetVoucher(Guid estateId,
Guid contractId,
String voucherCode,
CancellationToken cancellationToken) {
return new GetVoucherResponse();
}

public async Task<RedeemVoucherResponse> RedeemVoucher(Guid estateId,
Guid contractId,
String voucherCode,
CancellationToken cancellationToken) {
return new RedeemVoucherResponse();
}
}
110 changes: 110 additions & 0 deletions VoucherManagementACL.BusinessLogic.Tests/MediatorTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
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 VoucherManagementACL.Testing;
using Xunit;

namespace VoucherManagementACL.BusinessLogic.Tests
{
using Lamar;
using Microsoft.Extensions.DependencyInjection;
using Services;

public class MediatorTests
{
private List<IBaseRequest> Requests = new List<IBaseRequest>();

public MediatorTests()
{
this.Requests.Add(TestData.VersionCheckRequest);
this.Requests.Add(TestData.GetVoucherRequest);
this.Requests.Add(TestData.RedeemVoucherRequest);
}

[Fact]
public async Task Mediator_Send_RequestHandled()
{
Mock<IWebHostEnvironment> hostingEnvironment = new Mock<IWebHostEnvironment>();
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<String> errors = new List<String>();
IMediator mediator = Startup.Container.GetService<IMediator>();
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<String, String> configuration = new Dictionary<String, String>();

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:EstateManagementApi", "http://127.0.0.1");
configuration.Add("AppSettings:TransactionProcessorApi", "http://127.0.0.1");
configuration.Add("AppSettings:DatabaseEngine", "SqlServer");
configuration.Add("AppSettings:MinimumSupportedApplicationVersion", "1.0.0");
configuration.Add("AppSettings:ClientId", "clientId");
configuration.Add("AppSettings:ClientSecret", "clientSecret");

builder.AddInMemoryCollection(configuration);

return builder.Build();
}

private void AddTestRegistrations(ServiceRegistry services,
IWebHostEnvironment hostingEnvironment)
{
services.AddLogging();
DiagnosticListener diagnosticSource = new DiagnosticListener(hostingEnvironment.ApplicationName);
services.AddSingleton<DiagnosticSource>(diagnosticSource);
services.AddSingleton<DiagnosticListener>(diagnosticSource);
services.AddSingleton<IWebHostEnvironment>(hostingEnvironment);
services.AddSingleton<IHostEnvironment>(hostingEnvironment);
services.AddSingleton<IConfiguration>(Startup.Configuration);

services.OverrideServices(s => { s.AddSingleton<IVoucherManagementACLApplicationService, DummyVoucherManagementACLApplicationService>(); });
}
}
}
26 changes: 17 additions & 9 deletions VoucherManagementACL.BusinessLogic.Tests/RequestHandlerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ namespace VoucherManagementACL.BusinessLogic.Tests
{
using System.Threading;
using System.Threading.Tasks;
using Common;
using Microsoft.Extensions.Configuration;
using Moq;
using RequestHandlers;
Expand Down Expand Up @@ -39,11 +40,9 @@ public async Task VoucherRequestHandler_GetVoucherRequest_Handle_RequestIsHandle
Mock<IVoucherManagementACLApplicationService> voucherManagementACLApplicationService = new Mock<IVoucherManagementACLApplicationService>();
VoucherRequestHandler requestHandler = new VoucherRequestHandler(voucherManagementACLApplicationService.Object);

GetVoucherRequest request = GetVoucherRequest.Create(TestData.EstateId, TestData.ContractId, TestData.VoucherCode);

Should.NotThrow(async () =>
{
await requestHandler.Handle(request, CancellationToken.None);
await requestHandler.Handle(TestData.GetVoucherRequest, CancellationToken.None);
});
}

Expand All @@ -52,12 +51,10 @@ public async Task VoucherRequestHandler_RedeemVoucherRequest_Handle_RequestIsHan
{
Mock<IVoucherManagementACLApplicationService> voucherManagementACLApplicationService = new Mock<IVoucherManagementACLApplicationService>();
VoucherRequestHandler requestHandler = new VoucherRequestHandler(voucherManagementACLApplicationService.Object);

RedeemVoucherRequest request = RedeemVoucherRequest.Create(TestData.EstateId, TestData.ContractId, TestData.VoucherCode);


Should.NotThrow(async () =>
{
await requestHandler.Handle(request, CancellationToken.None);
await requestHandler.Handle(TestData.RedeemVoucherRequest, CancellationToken.None);
});
}

Expand All @@ -67,10 +64,9 @@ public async Task VersionCheckRequestHandler_Handle_RequestIsHandled()
{
VersionCheckRequestHandler requestHandler = new VersionCheckRequestHandler();

VersionCheckRequest request = TestData.VersionCheckRequest;
Should.NotThrow(async () =>
{
await requestHandler.Handle(request, CancellationToken.None);
await requestHandler.Handle(TestData.VersionCheckRequest, CancellationToken.None);
});
}

Expand Down Expand Up @@ -98,6 +94,18 @@ public async Task VersionCheckRequestHandler_Handle_NewerVersionBuildNumber_Requ
});
}

[Fact]
public async Task VersionCheckRequestHandler_Handle_InvalidVersionBuildNumber_RequestIsHandled()
{
VersionCheckRequestHandler requestHandler = new VersionCheckRequestHandler();

VersionCheckRequest request = VersionCheckRequest.Create("invalid");
Should.Throw<VersionIncompatibleException>(async () =>
{
await requestHandler.Handle(request, CancellationToken.None);
}); ;
}

#endregion
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Lamar" Version="8.1.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.0" />
<PackageReference Include="Moq" Version="4.18.2" />
<PackageReference Include="Shouldly" Version="4.1.0" />
Expand All @@ -25,6 +26,7 @@
<ItemGroup>
<ProjectReference Include="..\VoucherManagementACL.BusinessLogic\VoucherManagementACL.BusinessLogic.csproj" />
<ProjectReference Include="..\VoucherManagementACL.Testing\VoucherManagementACL.Testing.csproj" />
<ProjectReference Include="..\VoucherManagementACL\VoucherManagementACL.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace VoucherManagementACL.BusinessLogic.Common;

using System;
using System.Diagnostics.CodeAnalysis;

[ExcludeFromCodeCoverage]
public class VersionIncompatibleException : Exception
{
public VersionIncompatibleException(String message) : base(message)
{

}

public VersionIncompatibleException(String message, Exception innerException) : base(message, innerException)
{

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Common;
using MediatR;
using Requests;
using Shared.General;
Expand Down Expand Up @@ -36,25 +37,12 @@ public async Task<Unit> Handle(VersionCheckRequest request,
if (requestVersion == null || requestVersion.CompareTo(minimumVersion) < 0)
{
// This is not compatible
throw new VersionIncompatibleException($"Version Mistmatch - Version number [{requestVersion}] is less than the Minimum Supported version [{minimumVersion}]");
throw new VersionIncompatibleException($"Version Mismatch - Version number [{requestVersion}] is less than the Minimum Supported version [{minimumVersion}]");
}

return default;
}

#endregion
}

public class VersionIncompatibleException : Exception
{
public VersionIncompatibleException(String message) : base(message)
{

}

public VersionIncompatibleException(String message, Exception innerException) : base(message, innerException)
{

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,8 @@
<ProjectReference Include="..\VoucherManagementACL.Models\VoucherManagementACL.Models.csproj" />
</ItemGroup>

<ItemGroup>
<Folder Include="Common\" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

<PropertyGroup>
<TargetFrameworks>net7.0;netstandard2.0</TargetFrameworks>
<DebugType>None</DebugType>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net5.0|AnyCPU'">
Expand Down
3 changes: 3 additions & 0 deletions VoucherManagementACL.Testing/TestData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using Newtonsoft.Json;
using SecurityService.DataTransferObjects.Responses;
using TransactionProcessor.DataTransferObjects;
using RedeemVoucherRequest = BusinessLogic.Requests.RedeemVoucherRequest;

/// <summary>
///
Expand Down Expand Up @@ -42,6 +43,8 @@ public class TestData
public static String ApplicationVersion = "1.0.5";

public static VersionCheckRequest VersionCheckRequest = VersionCheckRequest.Create(TestData.ApplicationVersion);
public static RedeemVoucherRequest RedeemVoucherRequest = RedeemVoucherRequest.Create(TestData.EstateId, TestData.ContractId, TestData.VoucherCode);
public static GetVoucherRequest GetVoucherRequest = GetVoucherRequest.Create(TestData.EstateId, TestData.ContractId, TestData.VoucherCode);

public static String VoucherCode = "1231231234";

Expand Down
3 changes: 2 additions & 1 deletion VoucherManagementACL.Tests/General/BootstrapperTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ namespace VoucherManagementACL.Tests.General

public class BootstrapperTests
{
[Fact(Skip = "Needs investigated")]
[Fact]
public void VerifyBootstrapperIsValid()
{
Mock<IWebHostEnvironment> hostingEnvironment = new Mock<IWebHostEnvironment>();
Expand Down Expand Up @@ -67,6 +67,7 @@ private void AddTestRegistrations(ServiceRegistry services,
services.AddSingleton<DiagnosticListener>(diagnosticSource);
services.AddSingleton<IWebHostEnvironment>(hostingEnvironment);
services.AddSingleton<IHostEnvironment>(hostingEnvironment);
services.AddSingleton<IConfiguration>(Startup.Configuration);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
namespace VoucherManagementACL.Bootstrapper
{
using System.Diagnostics.CodeAnalysis;
using BusinessLogic.Services;
using Lamar;
using Microsoft.Extensions.DependencyInjection;

/// <summary>
///
/// </summary>
/// <seealso cref="Lamar.ServiceRegistry" />
[ExcludeFromCodeCoverage]
public class ApplicationServiceRegistry : ServiceRegistry
{
#region Constructors
Expand Down
6 changes: 2 additions & 4 deletions VoucherManagementACL/Bootstrapper/ClientRegistry.cs
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
namespace VoucherManagementACL.Bootstrapper
{
using System;
using System.Diagnostics.CodeAnalysis;
using System.Net.Http;
using Lamar;
using Microsoft.Extensions.DependencyInjection;
using SecurityService.Client;
using Shared.General;
using TransactionProcessor.Client;

/// <summary>
///
/// </summary>
/// <seealso cref="Lamar.ServiceRegistry" />
[ExcludeFromCodeCoverage]
public class ClientRegistry : ServiceRegistry
{
#region Constructors
Expand Down
6 changes: 2 additions & 4 deletions VoucherManagementACL/Bootstrapper/MediatorRegistry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,9 @@
using MediatR;
using Microsoft.Extensions.DependencyInjection;
using Models;
using System.Diagnostics.CodeAnalysis;

/// <summary>
///
/// </summary>
/// <seealso cref="Lamar.ServiceRegistry" />
[ExcludeFromCodeCoverage]
public class MediatorRegistry : ServiceRegistry
{
#region Constructors
Expand Down
6 changes: 2 additions & 4 deletions VoucherManagementACL/Bootstrapper/MiddlewareRegistry.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
namespace VoucherManagementACL.Bootstrapper
{
using System;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Net.Http;
using System.Reflection;
Expand All @@ -16,10 +17,7 @@
using Shared.General;
using Swashbuckle.AspNetCore.Filters;

/// <summary>
///
/// </summary>
/// <seealso cref="Lamar.ServiceRegistry" />
[ExcludeFromCodeCoverage]
public class MiddlewareRegistry : ServiceRegistry
{
#region Constructors
Expand Down
Loading