Skip to content

Commit ae9b865

Browse files
Merge pull request #404 from TransactionProcessing/task/#389_fixbootstrappertestandaddmediatortests
Fix bootstrapper tests and add mediator tests
2 parents 5eebcb1 + f201d11 commit ae9b865

File tree

15 files changed

+491
-439
lines changed

15 files changed

+491
-439
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
namespace TransactionProcessor.BusinessLogic.Tests.Mediator;
2+
3+
using System;
4+
using System.Threading;
5+
using System.Threading.Tasks;
6+
using BusinessLogic.Services;
7+
using Models;
8+
9+
public class DummySettlementDomainService : ISettlementDomainService
10+
{
11+
public async Task<ProcessSettlementResponse> ProcessSettlement(DateTime pendingSettlementDate,
12+
Guid estateId,
13+
CancellationToken cancellationToken) {
14+
return new ProcessSettlementResponse();
15+
}
16+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
namespace TransactionProcessor.BusinessLogic.Tests.Mediator;
2+
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Threading;
6+
using System.Threading.Tasks;
7+
using BusinessLogic.Services;
8+
using Models;
9+
10+
public class DummyTransactionDomainService : ITransactionDomainService
11+
{
12+
public async Task<ProcessLogonTransactionResponse> ProcessLogonTransaction(Guid transactionId,
13+
Guid estateId,
14+
Guid merchantId,
15+
DateTime transactionDateTime,
16+
String transactionNumber,
17+
String deviceIdentifier,
18+
CancellationToken cancellationToken) {
19+
return new ProcessLogonTransactionResponse();
20+
}
21+
22+
public async Task<ProcessSaleTransactionResponse> ProcessSaleTransaction(Guid transactionId,
23+
Guid estateId,
24+
Guid merchantId,
25+
DateTime transactionDateTime,
26+
String transactionNumber,
27+
String deviceIdentifier,
28+
String operatorId,
29+
String customerEmailAddress,
30+
Dictionary<String, String> additionalTransactionMetadata,
31+
Guid contractId,
32+
Guid productId,
33+
Int32 transactionSource,
34+
CancellationToken cancellationToken) {
35+
return new ProcessSaleTransactionResponse();
36+
}
37+
38+
public async Task<ProcessReconciliationTransactionResponse> ProcessReconciliationTransaction(Guid transactionId,
39+
Guid estateId,
40+
Guid merchantId,
41+
String deviceIdentifier,
42+
DateTime transactionDateTime,
43+
Int32 transactionCount,
44+
Decimal transactionValue,
45+
CancellationToken cancellationToken) {
46+
return new ProcessReconciliationTransactionResponse();
47+
}
48+
49+
public async Task ResendTransactionReceipt(Guid transactionId,
50+
Guid estateId,
51+
CancellationToken cancellationToken) {
52+
}
53+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
namespace TransactionProcessor.BusinessLogic.Tests.Mediator;
2+
3+
using System;
4+
using System.Threading;
5+
using System.Threading.Tasks;
6+
using BusinessLogic.Services;
7+
using Models;
8+
9+
public class DummyVoucherDomainService : IVoucherDomainService
10+
{
11+
public async Task<IssueVoucherResponse> IssueVoucher(Guid voucherId,
12+
String operatorId,
13+
Guid estateId,
14+
Guid transactionId,
15+
DateTime issuedDateTime,
16+
Decimal value,
17+
String recipientEmail,
18+
String recipientMobile,
19+
CancellationToken cancellationToken) {
20+
return new IssueVoucherResponse();
21+
}
22+
23+
public async Task<RedeemVoucherResponse> RedeemVoucher(Guid estateId,
24+
String voucherCode,
25+
DateTime redeemedDateTime,
26+
CancellationToken cancellationToken) {
27+
return new RedeemVoucherResponse();
28+
}
29+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
using MediatR;
2+
using Microsoft.AspNetCore.Hosting;
3+
using Microsoft.Extensions.Configuration;
4+
using Microsoft.Extensions.Hosting;
5+
using Moq;
6+
using System;
7+
using System.Collections.Generic;
8+
using System.Diagnostics;
9+
using System.Linq;
10+
using System.Text;
11+
using System.Threading.Tasks;
12+
using Xunit;
13+
14+
namespace TransactionProcessor.BusinessLogic.Tests.Mediator
15+
{
16+
using BusinessLogic.Services;
17+
using Lamar;
18+
using Microsoft.Extensions.DependencyInjection;
19+
using Testing;
20+
21+
public class MediatorTests
22+
{
23+
private List<IBaseRequest> Requests = new List<IBaseRequest>();
24+
25+
public MediatorTests()
26+
{
27+
this.Requests.Add(TestData.ProcessLogonTransactionRequest);
28+
this.Requests.Add(TestData.ProcessReconciliationRequest);
29+
this.Requests.Add(TestData.ProcessSaleTransactionRequest);
30+
this.Requests.Add(TestData.ProcessSettlementRequest);
31+
}
32+
33+
[Fact]
34+
public async Task Mediator_Send_RequestHandled()
35+
{
36+
Mock<IWebHostEnvironment> hostingEnvironment = new Mock<IWebHostEnvironment>();
37+
hostingEnvironment.Setup(he => he.EnvironmentName).Returns("Development");
38+
hostingEnvironment.Setup(he => he.ContentRootPath).Returns("/home");
39+
hostingEnvironment.Setup(he => he.ApplicationName).Returns("Test Application");
40+
41+
ServiceRegistry services = new ServiceRegistry();
42+
Startup s = new Startup(hostingEnvironment.Object);
43+
Startup.Configuration = this.SetupMemoryConfiguration();
44+
45+
this.AddTestRegistrations(services, hostingEnvironment.Object);
46+
s.ConfigureContainer(services);
47+
Startup.Container.AssertConfigurationIsValid(AssertMode.Full);
48+
49+
List<String> errors = new List<String>();
50+
IMediator mediator = Startup.Container.GetService<IMediator>();
51+
foreach (IBaseRequest baseRequest in this.Requests)
52+
{
53+
try
54+
{
55+
await mediator.Send(baseRequest);
56+
}
57+
catch (Exception ex)
58+
{
59+
errors.Add(ex.Message);
60+
}
61+
}
62+
63+
if (errors.Any() == true)
64+
{
65+
String errorMessage = String.Join(Environment.NewLine, errors);
66+
throw new Exception(errorMessage);
67+
}
68+
}
69+
70+
private IConfigurationRoot SetupMemoryConfiguration()
71+
{
72+
Dictionary<String, String> configuration = new Dictionary<String, String>();
73+
74+
IConfigurationBuilder builder = new ConfigurationBuilder();
75+
76+
builder.AddInMemoryCollection(TestData.DefaultAppSettings);
77+
78+
return builder.Build();
79+
}
80+
81+
private void AddTestRegistrations(ServiceRegistry services,
82+
IWebHostEnvironment hostingEnvironment)
83+
{
84+
services.AddLogging();
85+
DiagnosticListener diagnosticSource = new DiagnosticListener(hostingEnvironment.ApplicationName);
86+
services.AddSingleton<DiagnosticSource>(diagnosticSource);
87+
services.AddSingleton<DiagnosticListener>(diagnosticSource);
88+
services.AddSingleton<IWebHostEnvironment>(hostingEnvironment);
89+
services.AddSingleton<IHostEnvironment>(hostingEnvironment);
90+
services.AddSingleton<IConfiguration>(Startup.Configuration);
91+
92+
services.OverrideServices(s => {
93+
s.AddSingleton<ISettlementDomainService, DummySettlementDomainService>();
94+
s.AddSingleton<IVoucherDomainService, DummyVoucherDomainService>();
95+
s.AddSingleton<ITransactionDomainService, DummyTransactionDomainService>();
96+
});
97+
}
98+
}
99+
}

TransactionProcessor.BusinessLogic.Tests/TransactionProcessor.BusinessLogic.Tests.csproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22

33
<PropertyGroup>
44
<TargetFramework>net7.0</TargetFramework>
5-
<DebugType>Full</DebugType>
5+
<DebugType>None</DebugType>
66
<IsPackable>false</IsPackable>
77
</PropertyGroup>
88

99
<ItemGroup>
10+
<PackageReference Include="Lamar" Version="8.1.0" />
1011
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.0" />
1112
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.0" />
1213
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.0" />
@@ -28,6 +29,7 @@
2829
<ItemGroup>
2930
<ProjectReference Include="..\TransactionProcessor.BusinessLogic\TransactionProcessor.BusinessLogic.csproj" />
3031
<ProjectReference Include="..\TransactionProcessor.Testing\TransactionProcessor.Testing.csproj" />
32+
<ProjectReference Include="..\TransactionProcessor\TransactionProcessor.csproj" />
3133
</ItemGroup>
3234

3335
</Project>

0 commit comments

Comments
 (0)