Skip to content

Commit 1da3dc0

Browse files
Merge pull request #173 from TransactionProcessing/task/#168_fixbootstrappertestandmediatortests
Fix bootstrapper test and add mediator tests
2 parents a5c9460 + c3c4224 commit 1da3dc0

File tree

17 files changed

+183
-17
lines changed

17 files changed

+183
-17
lines changed
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
using Lamar;
2+
using MediatR;
3+
using Microsoft.AspNetCore.Hosting;
4+
using Microsoft.Extensions.Configuration;
5+
using Microsoft.Extensions.Hosting;
6+
using Moq;
7+
using System;
8+
using System.Collections.Generic;
9+
using System.Diagnostics;
10+
using System.Linq;
11+
using System.Text;
12+
using System.Threading.Tasks;
13+
using TransactionProcessorACL.Testing;
14+
using Xunit;
15+
16+
namespace TransactionProcessorACL.BusinessLogic.Tests
17+
{
18+
using System.Threading;
19+
using Microsoft.Extensions.DependencyInjection;
20+
using Models;
21+
using Services;
22+
23+
public class MediatorTests
24+
{
25+
private List<IBaseRequest> Requests = new List<IBaseRequest>();
26+
27+
public MediatorTests()
28+
{
29+
this.Requests.Add(TestData.ProcessLogonTransactionRequest);
30+
this.Requests.Add(TestData.ProcessReconciliationRequest);
31+
this.Requests.Add(TestData.ProcessSaleTransactionRequest);
32+
}
33+
34+
[Fact]
35+
public async Task Mediator_Send_RequestHandled()
36+
{
37+
Mock<IWebHostEnvironment> hostingEnvironment = new Mock<IWebHostEnvironment>();
38+
hostingEnvironment.Setup(he => he.EnvironmentName).Returns("Development");
39+
hostingEnvironment.Setup(he => he.ContentRootPath).Returns("/home");
40+
hostingEnvironment.Setup(he => he.ApplicationName).Returns("Test Application");
41+
42+
ServiceRegistry services = new ServiceRegistry();
43+
Startup s = new Startup(hostingEnvironment.Object);
44+
Startup.Configuration = this.SetupMemoryConfiguration();
45+
46+
this.AddTestRegistrations(services, hostingEnvironment.Object);
47+
s.ConfigureContainer(services);
48+
Startup.Container.AssertConfigurationIsValid(AssertMode.Full);
49+
50+
List<String> errors = new List<String>();
51+
IMediator mediator = Startup.Container.GetService<IMediator>();
52+
foreach (IBaseRequest baseRequest in this.Requests)
53+
{
54+
try
55+
{
56+
await mediator.Send(baseRequest);
57+
}
58+
catch (Exception ex)
59+
{
60+
errors.Add(ex.Message);
61+
}
62+
}
63+
64+
if (errors.Any() == true)
65+
{
66+
String errorMessage = String.Join(Environment.NewLine, errors);
67+
throw new Exception(errorMessage);
68+
}
69+
}
70+
71+
private IConfigurationRoot SetupMemoryConfiguration()
72+
{
73+
Dictionary<String, String> configuration = new Dictionary<String, String>();
74+
75+
IConfigurationBuilder builder = new ConfigurationBuilder();
76+
77+
builder.AddInMemoryCollection(TestData.DefaultAppSettings);
78+
79+
return builder.Build();
80+
}
81+
82+
private void AddTestRegistrations(ServiceRegistry services,
83+
IWebHostEnvironment hostingEnvironment)
84+
{
85+
services.AddLogging();
86+
DiagnosticListener diagnosticSource = new DiagnosticListener(hostingEnvironment.ApplicationName);
87+
services.AddSingleton<DiagnosticSource>(diagnosticSource);
88+
services.AddSingleton<DiagnosticListener>(diagnosticSource);
89+
services.AddSingleton<IWebHostEnvironment>(hostingEnvironment);
90+
services.AddSingleton<IHostEnvironment>(hostingEnvironment);
91+
services.AddSingleton<IConfiguration>(Startup.Configuration);
92+
93+
services.OverrideServices(s => { s.AddSingleton<ITransactionProcessorACLApplicationService, DummyTransactionProcessorACLApplicationService>(); });
94+
}
95+
}
96+
97+
public class DummyTransactionProcessorACLApplicationService : ITransactionProcessorACLApplicationService
98+
{
99+
public async Task<ProcessLogonTransactionResponse> ProcessLogonTransaction(Guid estateId,
100+
Guid merchantId,
101+
DateTime transactionDateTime,
102+
String transactionNumber,
103+
String deviceIdentifier,
104+
CancellationToken cancellationToken) {
105+
return new ProcessLogonTransactionResponse();
106+
}
107+
108+
public async Task<ProcessSaleTransactionResponse> ProcessSaleTransaction(Guid estateId,
109+
Guid merchantId,
110+
DateTime transactionDateTime,
111+
String transactionNumber,
112+
String deviceIdentifier,
113+
String operatorIdentifier,
114+
String customerEmailAddress,
115+
Guid contractId,
116+
Guid productId,
117+
Dictionary<String, String> additionalRequestMetadata,
118+
CancellationToken cancellationToken) {
119+
return new ProcessSaleTransactionResponse();
120+
}
121+
122+
public async Task<ProcessReconciliationResponse> ProcessReconciliation(Guid estateId,
123+
Guid merchantId,
124+
DateTime transactionDateTime,
125+
String deviceIdentifier,
126+
Int32 transactionCount,
127+
Decimal transactionValue,
128+
CancellationToken cancellationToken) {
129+
return new ProcessReconciliationResponse();
130+
}
131+
}
132+
}

TransactionProcessorACL.BusinessLogic.Tests/RequestHandlerTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ namespace TransactionProcessorACL.BusinesssLogic.Tests
44
using System.Collections.Generic;
55
using System.Threading;
66
using System.Threading.Tasks;
7+
using BusinessLogic.Common;
78
using BusinessLogic.RequestHandlers;
89
using BusinessLogic.Requests;
910
using BusinessLogic.Services;

TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACL.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.NET.Test.Sdk" Version="17.4.0" />
1112
<PackageReference Include="Moq" Version="4.18.2" />
1213
<PackageReference Include="Shouldly" Version="4.1.0" />
@@ -24,6 +25,7 @@
2425
<ItemGroup>
2526
<ProjectReference Include="..\TransactionProcessorACL.BusinessLogic\TransactionProcessorACL.BusinessLogic.csproj" />
2627
<ProjectReference Include="..\TransactionProcessorACL.Testing\TransactionProcessorACL.Testing.csproj" />
28+
<ProjectReference Include="..\TransactionProcessorACL\TransactionProcessorACL.csproj" />
2729
</ItemGroup>
2830

2931
</Project>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
namespace TransactionProcessorACL.BusinessLogic.Common;
2+
3+
using System;
4+
using System.Diagnostics.CodeAnalysis;
5+
6+
[ExcludeFromCodeCoverage]
7+
public class VersionIncompatibleException : Exception
8+
{
9+
public VersionIncompatibleException(String message) : base(message)
10+
{
11+
12+
}
13+
14+
public VersionIncompatibleException(String message, Exception innerException) : base(message, innerException)
15+
{
16+
17+
}
18+
}

TransactionProcessorACL.BusinessLogic/RequestHandlers/VersionCheckRequestHandler.cs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Net;
55
using System.Threading;
66
using System.Threading.Tasks;
7+
using Common;
78
using MediatR;
89
using Microsoft.AspNetCore.Http;
910
using Microsoft.AspNetCore.Http.Extensions;
@@ -55,17 +56,4 @@ public async Task<Unit> Handle(VersionCheckRequest request,
5556

5657
#endregion
5758
}
58-
59-
public class VersionIncompatibleException : Exception
60-
{
61-
public VersionIncompatibleException(String message) : base(message)
62-
{
63-
64-
}
65-
66-
public VersionIncompatibleException(String message, Exception innerException) : base(message, innerException)
67-
{
68-
69-
}
70-
}
7159
}

TransactionProcessorACL.BusinessLogic/TransactionProcessorACL.BusinessLogic.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,8 @@
1515
<ProjectReference Include="..\TransactionProcessorACL.Models\TransactionProcessorACL.Models.csproj" />
1616
</ItemGroup>
1717

18+
<ItemGroup>
19+
<Folder Include="Common\" />
20+
</ItemGroup>
21+
1822
</Project>

TransactionProcessorACL.Testing/TestData.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{
33
using System;
44
using System.Collections.Generic;
5+
using Microsoft.Extensions.Configuration;
56
using Models;
67
using Newtonsoft.Json;
78
using SecurityService.DataTransferObjects.Responses;
@@ -209,10 +210,12 @@ public class TestData
209210
new Dictionary<String, String>
210211
{
211212
["AppSettings:MinimumSupportedApplicationVersion"] = "1.0.5",
212-
["AppSettings: SecurityService"] = "http://192.168.1.133:5001",
213+
["AppSettings:SecurityService"] = "http://192.168.1.133:5001",
213214
["AppSettings:TransactionProcessorApi"] = "http://192.168.1.133:5002",
214215
["AppSettings:ClientId"] = "ClientId",
215-
["AppSettings:ClientSecret"] = "secret"
216+
["AppSettings:ClientSecret"] = "secret",
217+
["SecurityConfiguration:Authority"] = "https://127.0.0.1",
218+
["EventStoreSettings:ConnectionString"] = "https://127.0.0.1:2113"
216219
};
217220

218221
public static String OldApplicationVersion = "1.0.4";

TransactionProcessorACL.Tests/General/BootstrapperTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class BootstrapperTests
2020
{
2121
#region Methods
2222

23-
[Fact(Skip = "needs investigated")]
23+
[Fact]
2424
public void VerifyBootstrapperIsValid()
2525
{
2626
Mock<IWebHostEnvironment> hostingEnvironment = new Mock<IWebHostEnvironment>();
@@ -70,6 +70,7 @@ private void AddTestRegistrations(ServiceRegistry services,
7070
services.AddSingleton<DiagnosticListener>(diagnosticSource);
7171
services.AddSingleton<IWebHostEnvironment>(hostingEnvironment);
7272
services.AddSingleton<IHostEnvironment>(hostingEnvironment);
73+
services.AddSingleton<IConfiguration>(Startup.Configuration);
7374
}
7475

7576
#endregion

TransactionProcessorACL/Bootstrapper/ApplicationServiceRegistry.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
using BusinessLogic.Services;
44
using Lamar;
55
using Microsoft.Extensions.DependencyInjection;
6+
using System.Diagnostics.CodeAnalysis;
67

78
/// <summary>
89
///
910
/// </summary>
1011
/// <seealso cref="Lamar.ServiceRegistry" />
12+
[ExcludeFromCodeCoverage]
1113
public class ApplicationServiceRegistry : ServiceRegistry
1214
{
1315
#region Constructors

TransactionProcessorACL/Bootstrapper/ClientRegistry.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace TransactionProcessorACL.Bootstrapper
22
{
33
using System;
4+
using System.Diagnostics.CodeAnalysis;
45
using System.Net.Http;
56
using Lamar;
67
using Microsoft.Extensions.DependencyInjection;
@@ -12,6 +13,7 @@
1213
///
1314
/// </summary>
1415
/// <seealso cref="Lamar.ServiceRegistry" />
16+
[ExcludeFromCodeCoverage]
1517
public class ClientRegistry : ServiceRegistry
1618
{
1719
#region Constructors

0 commit comments

Comments
 (0)