diff --git a/Directory.Packages.props b/Directory.Packages.props
index 9b41764b..1c2b84fa 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -8,22 +8,22 @@
-
-
+
+
-
-
-
+
+
+
-
-
+
+
@@ -38,23 +38,23 @@
-
-
-
-
+
+
+
+
-
+
-
-
-
-
+
+
+
+
@@ -62,15 +62,15 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -88,7 +88,7 @@
-
+
diff --git a/TransactionProcessor.BusinessLogic.Tests/Services/EstateDomainServiceTests.cs b/TransactionProcessor.BusinessLogic.Tests/Services/EstateDomainServiceTests.cs
index 3ab71d32..b5aa4563 100644
--- a/TransactionProcessor.BusinessLogic.Tests/Services/EstateDomainServiceTests.cs
+++ b/TransactionProcessor.BusinessLogic.Tests/Services/EstateDomainServiceTests.cs
@@ -1,8 +1,11 @@
+using Microsoft.Extensions.Configuration;
using Imposter.Abstractions;
using SecurityService.Client;
using SecurityService.DataTransferObjects;
using Shared.DomainDrivenDesign.EventSourcing;
using Shared.EventStore.Aggregate;
+using Shared.General;
+using Shared.Logger;
using Shared.Serialisation;
using Shouldly;
using SimpleResults;
@@ -26,8 +29,15 @@ public class EstateDomainServiceTests {
private ISecurityServiceClientImposter SecurityServiceClient;
public EstateDomainServiceTests() {
StringSerialiser.Initialise(new SystemTextJsonSerializer(new JsonSerializerOptions()));
+ IConfigurationRoot configurationRoot = new ConfigurationBuilder().AddInMemoryCollection(TestData.DefaultAppSettings).Build();
+ ConfigurationReader.Initialise(configurationRoot);
+ Logger.Initialise(NullLogger.Instance);
+
this.AggregateService= new IAggregateServiceImposter();
this.SecurityServiceClient = new ISecurityServiceClientImposter();
+ this.SecurityServiceClient
+ .GetToken(Arg.Any(), Arg.Any(), Arg.Any())
+ .ReturnsAsync(Result.Success(TestData.GetTokenResponse()));
IAggregateService AggregateServiceResolver() => this.AggregateService.Instance();
this.DomainService = new EstateDomainService(AggregateServiceResolver, this.SecurityServiceClient.Instance());
}
@@ -77,10 +87,10 @@ public async Task EstateDomainService_CreateEstateUser_EstateUserIsCreated() {
.ReturnsAsync(SimpleResults.Result.Success());
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(),Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .GetUsers(Arg.Any(), Arg.Any())
+ .GetUsers(Arg.Any(),Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(new List() {
new UserResponse {
UserId = "FA077CE3-B915-4048-88E3-9B500699317F"
@@ -105,11 +115,11 @@ public async Task EstateDomainService_CreateEstateUser_EstateRoleOverrideIsUsedI
.ReturnsAsync(SimpleResults.Result.Success());
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success())
- .Callback((request, _) => { capturedRequest = request; return Task.CompletedTask; });
+ .Callback((token, request, _) => { capturedRequest = request; return Task.CompletedTask; });
this.SecurityServiceClient
- .GetUsers(Arg.Any(), Arg.Any())
+ .GetUsers(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(new List() {
new UserResponse {
UserId = "FA077CE3-B915-4048-88E3-9B500699317F"
@@ -137,10 +147,10 @@ public async Task EstateDomainService_CreateEstateUser_UserCreateFailed_ResultIs
.ReturnsAsync(SimpleResults.Result.Success());
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Failure());
this.SecurityServiceClient
- .GetUsers(Arg.Any(), Arg.Any())
+ .GetUsers(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(new List() {
new UserResponse {
UserId = "FA077CE3-B915-4048-88E3-9B500699317F"
@@ -160,10 +170,10 @@ public async Task EstateDomainService_CreateEstateUser_GetUsersFailed_ResultIsFa
.ReturnsAsync(SimpleResults.Result.Success());
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .GetUsers(Arg.Any(), Arg.Any())
+ .GetUsers(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Failure());
Result result = await this.DomainService.CreateEstateUser(TestData.Commands.CreateEstateUserCommand, TestContext.Current.CancellationToken);
@@ -179,10 +189,10 @@ public async Task EstateDomainService_CreateEstateUser_NullUserReturned_ResultIs
.ReturnsAsync(SimpleResults.Result.Success());
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .GetUsers(Arg.Any(), Arg.Any())
+ .GetUsers(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(new List() {
null
}));
@@ -198,10 +208,10 @@ public async Task EstateDomainService_CreateEstateUser_GetEstateFailed_ResultIsF
.ReturnsAsync(Result.Failure());
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .GetUsers(Arg.Any(), Arg.Any())
+ .GetUsers(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(new List() {
new UserResponse {
UserId = "FA077CE3-B915-4048-88E3-9B500699317F"
@@ -221,10 +231,10 @@ public async Task EstateDomainService_CreateEstateUser_EstateNotCreated_ResultIs
.ReturnsAsync(SimpleResults.Result.Success());
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .GetUsers(Arg.Any(), Arg.Any())
+ .GetUsers(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(new List() {
new UserResponse {
UserId = "FA077CE3-B915-4048-88E3-9B500699317F"
@@ -244,10 +254,10 @@ public async Task EstateDomainService_CreateEstateUser_SaveFailed_ResultIsFailed
.ReturnsAsync(Result.Failure());
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .GetUsers(Arg.Any(), Arg.Any())
+ .GetUsers(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(new List() {
new UserResponse {
UserId = "FA077CE3-B915-4048-88E3-9B500699317F"
@@ -410,7 +420,7 @@ public async Task EstateDomainService_AddOperatorToEstate_ExceptionThrown_Result
public async Task EstateDomainService_CreateEstateUser_ExceptionThrown_ResultIsFailed()
{
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ThrowsAsync(new Exception());
Result result = await this.DomainService.CreateEstateUser(TestData.Commands.CreateEstateUserCommand, TestContext.Current.CancellationToken);
diff --git a/TransactionProcessor.BusinessLogic.Tests/Services/MerchantDomainServiceTests.cs b/TransactionProcessor.BusinessLogic.Tests/Services/MerchantDomainServiceTests.cs
index 8ba557a2..542e6a98 100644
--- a/TransactionProcessor.BusinessLogic.Tests/Services/MerchantDomainServiceTests.cs
+++ b/TransactionProcessor.BusinessLogic.Tests/Services/MerchantDomainServiceTests.cs
@@ -49,6 +49,9 @@ public MerchantDomainServiceTests() {
this.AggregateService = new();
this.SecurityServiceClient = new();
+ this.SecurityServiceClient
+ .GetToken(Arg.Any(), Arg.Any(), Arg.Any())
+ .ReturnsAsync(Result.Success(TestData.GetTokenResponse()));
this.EventStoreContext = new();
Func aggregateServiceResolver = () => this.AggregateService.Instance();
this.DomainService = new MerchantDomainService(aggregateServiceResolver,
@@ -266,10 +269,10 @@ public async Task MerchantDomainService_CreateMerchantUser_MerchantUserIsCreated
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .GetUsers(Arg.Any(), Arg.Any())
+ .GetUsers(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(new List() {
new UserResponse {
UserId = "FA077CE3-B915-4048-88E3-9B500699317F"
@@ -292,7 +295,7 @@ public async Task MerchantDomainService_CreateMerchantUser_EstateNotCreated_Erro
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
var result = await this.DomainService.CreateMerchantUser(TestData.Commands.CreateMerchantUserCommand, TestContext.Current.CancellationToken);
@@ -311,7 +314,7 @@ public async Task MerchantDomainService_CreateMerchantUser_MerchantNotCreated_Er
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
var result = await this.DomainService.CreateMerchantUser(TestData.Commands.CreateMerchantUserCommand, TestContext.Current.CancellationToken);
@@ -330,7 +333,7 @@ public async Task MerchantDomainService_CreateMerchantUser_ErrorCreatingUser_Err
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Failure());
var result = await this.DomainService.CreateMerchantUser(TestData.Commands.CreateMerchantUserCommand, TestContext.Current.CancellationToken);
@@ -350,10 +353,10 @@ public async Task MerchantDomainService_CreateMerchantUser_ErrorGettingUsers_Err
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .GetUsers(Arg.Any(), Arg.Any())
+ .GetUsers(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Failure());
var result = await this.DomainService.CreateMerchantUser(TestData.Commands.CreateMerchantUserCommand, TestContext.Current.CancellationToken);
@@ -373,10 +376,10 @@ public async Task MerchantDomainService_CreateMerchantUser_UserInListIsNull_Erro
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .CreateUser(Arg.Any(), Arg.Any())
+ .CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
this.SecurityServiceClient
- .GetUsers(Arg.Any(), Arg.Any())
+ .GetUsers(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(new List {
null
}));
@@ -1423,9 +1426,9 @@ public async Task MerchantDomainService_CreateMerchantUser_SaveFailed_ResultIsFa
.ReturnsAsync(TestData.Aggregates.CreatedEstateAggregate());
this.AggregateService.GetLatest(Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(TestData.Aggregates.CreatedMerchantAggregate()));
- this.SecurityServiceClient.CreateUser(Arg.Any(), Arg.Any())
+ this.SecurityServiceClient.CreateUser(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
- this.SecurityServiceClient.GetUsers(Arg.Any(), Arg.Any())
+ this.SecurityServiceClient.GetUsers(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(new List { new UserResponse { UserId = "FA077CE3-B915-4048-88E3-9B500699317F" } }));
this.AggregateService.Save(Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Failure());
diff --git a/TransactionProcessor.BusinessLogic/Services/EstateDomainService.cs b/TransactionProcessor.BusinessLogic/Services/EstateDomainService.cs
index 9ef5804e..0e42945f 100644
--- a/TransactionProcessor.BusinessLogic/Services/EstateDomainService.cs
+++ b/TransactionProcessor.BusinessLogic/Services/EstateDomainService.cs
@@ -38,10 +38,12 @@ public class EstateDomainService : IEstateDomainService
private readonly IAggregateService AggregateService;
private readonly ISecurityServiceClient SecurityServiceClient;
+ private TokenResponse TokenResponse;
+
#endregion
#region Constructors
-
+
public EstateDomainService(Func aggregateService,
ISecurityServiceClient securityServiceClient) {
this.AggregateService = aggregateService();
@@ -160,11 +162,16 @@ private CreateUserRequest BuildEstateUserRequest(EstateCommands.CreateEstateUser
private async Task> CreateEstateSecurityUser(CreateUserRequest createUserRequest,
CancellationToken cancellationToken) {
- Result createUserResult = await this.SecurityServiceClient.CreateUser(createUserRequest, cancellationToken);
+ Result getTokenResult = await Helpers.GetToken(this.TokenResponse, this.SecurityServiceClient, cancellationToken);
+ if (getTokenResult.IsFailed)
+ return ResultHelpers.CreateFailure(getTokenResult);
+ this.TokenResponse = getTokenResult.Data;
+
+ Result createUserResult = await this.SecurityServiceClient.CreateUser(this.TokenResponse.AccessToken, createUserRequest, cancellationToken);
if (createUserResult.IsFailed)
return ResultHelpers.CreateFailure(createUserResult);
- Result> userDetailsResult = await this.SecurityServiceClient.GetUsers(createUserRequest.EmailAddress, cancellationToken);
+ Result> userDetailsResult = await this.SecurityServiceClient.GetUsers(this.TokenResponse.AccessToken, createUserRequest.EmailAddress, cancellationToken);
if (userDetailsResult.IsFailed)
return ResultHelpers.CreateFailure(userDetailsResult);
diff --git a/TransactionProcessor.BusinessLogic/Services/MerchantDomainService.cs b/TransactionProcessor.BusinessLogic/Services/MerchantDomainService.cs
index 744b7bfd..04ff132f 100644
--- a/TransactionProcessor.BusinessLogic/Services/MerchantDomainService.cs
+++ b/TransactionProcessor.BusinessLogic/Services/MerchantDomainService.cs
@@ -59,6 +59,7 @@ public class MerchantDomainService : IMerchantDomainService
private readonly IAggregateService AggregateService;
private readonly ISecurityServiceClient SecurityServiceClient;
private readonly IEventStoreContext EventStoreContext;
+ private TokenResponse TokenResponse;
#endregion
@@ -296,11 +297,16 @@ private CreateUserRequest BuildMerchantUserRequest(MerchantCommands.CreateMercha
private async Task> CreateMerchantSecurityUser(CreateUserRequest createUserRequest,
CancellationToken cancellationToken) {
- Result createUserResult = await this.SecurityServiceClient.CreateUser(createUserRequest, cancellationToken);
+ Result getTokenResult = await Helpers.GetToken(this.TokenResponse, this.SecurityServiceClient, cancellationToken);
+ if (getTokenResult.IsFailed)
+ return ResultHelpers.CreateFailure(getTokenResult);
+ this.TokenResponse = getTokenResult.Data;
+
+ Result createUserResult = await this.SecurityServiceClient.CreateUser(this.TokenResponse.AccessToken, createUserRequest, cancellationToken);
if (createUserResult.IsFailed)
return ResultHelpers.CreateFailure(createUserResult);
- Result> userDetailsResult = await this.SecurityServiceClient.GetUsers(createUserRequest.EmailAddress, cancellationToken);
+ Result> userDetailsResult = await this.SecurityServiceClient.GetUsers(this.TokenResponse.AccessToken, createUserRequest.EmailAddress, cancellationToken);
if (userDetailsResult.IsFailed)
return ResultHelpers.CreateFailure(userDetailsResult);
diff --git a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs
index 42a94317..f443f205 100644
--- a/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs
+++ b/TransactionProcessor.IntegrationTests/Common/DockerHelper.cs
@@ -92,17 +92,6 @@ await Retry.For(async () =>
responseMessage.IsSuccessStatusCode.ShouldBeTrue();
});
}
-
- //public override ContainerBuilder SetupTestHostContainer()
- //{
- // var variables = new Dictionary();
- // variables.Add("ConnectionStrings:AgencyBankingReadModel", $"server={this.SqlServerContainerName};user id={this.SqlCredentials.usename};password={this.SqlCredentials.password};database=AgencyBankingReadModel;Encrypt=false");
- // variables.Add("ASPNETCORE_ENVIRONMENT", $"PRODUCTION");
- // this.AdditionalVariables.Add(ContainerType.TestHost, variables);
-
- // return base.SetupTestHostContainer();
- //}
-
public override ContainerBuilder SetupTransactionProcessorContainer() {
Dictionary additionalVariables = new();
additionalVariables.Add("OperatorConfiguration:AgencyBanking:Url",$"http://{this.TestHostContainerName}:{DockerPorts.TestHostPort}/api/agencybanking");
@@ -112,6 +101,16 @@ public override ContainerBuilder SetupTransactionProcessorContainer() {
return base.SetupTransactionProcessorContainer();
}
+ public override ContainerBuilder SetupSecurityServiceContainer()
+ {
+ Dictionary additionalVariables = new();
+ additionalVariables.Add("ServiceOptions:OAuth:LegacyGrantTypeClients:password:1", "estateClient");
+
+ this.AdditionalVariables.Add(ContainerType.SecurityService, additionalVariables);
+
+ return base.SetupSecurityServiceContainer();
+ }
+
public override ContainerBuilder SetupTestHostContainer()
{
this.Trace("About to Start Test Hosts Container");
@@ -153,56 +152,6 @@ public override async Task CreateSubscriptions(){
}
}
- //public override ContainerBuilder SetupSecurityServiceContainer()
- //{
- // this.Trace("About to Start Security Container");
-
- // List environmentVariables = this.GetCommonEnvironmentVariables();
- // environmentVariables.Add($"ServiceOptions:PublicOrigin=https://{this.SecurityServiceContainerName}:{DockerPorts.SecurityServiceDockerPort}");
- // environmentVariables.Add($"ServiceOptions:IssuerUrl=https://{this.SecurityServiceContainerName}:{DockerPorts.SecurityServiceDockerPort}");
- // //environmentVariables.Add("ASPNETCORE_ENVIRONMENT=IntegrationTest");
- // environmentVariables.Add($"urls=https://*:{DockerPorts.SecurityServiceDockerPort}");
-
- // environmentVariables.Add("ServiceOptions:PasswordOptions:RequiredLength=6");
- // environmentVariables.Add("ServiceOptions:PasswordOptions:RequireDigit=false");
- // environmentVariables.Add("ServiceOptions:PasswordOptions:RequireUpperCase=false");
- // environmentVariables.Add("ServiceOptions:UserOptions:RequireUniqueEmail=false");
- // environmentVariables.Add("ServiceOptions:SignInOptions:RequireConfirmedEmail=false");
-
- // environmentVariables.Add(this.SetConnectionString("ConnectionStrings:PersistedGrantDbContext", $"PersistedGrantStore-{this.TestId}", this.UseSecureSqlServerDatabase));
- // environmentVariables.Add(this.SetConnectionString("ConnectionStrings:ConfigurationDbContext", $"Configuration-{this.TestId}", this.UseSecureSqlServerDatabase));
- // environmentVariables.Add(this.SetConnectionString("ConnectionStrings:AuthenticationDbContext", $"Authentication-{this.TestId}", this.UseSecureSqlServerDatabase));
-
- // List additionalEnvironmentVariables = this.GetAdditionalVariables(ContainerType.SecurityService);
-
- // if (additionalEnvironmentVariables != null)
- // {
- // environmentVariables.AddRange(additionalEnvironmentVariables);
- // }
-
- // var imageDetails = this.GetImageDetails(ContainerType.SecurityService);
- // if (imageDetails.IsFailed)
- // throw new Exception(imageDetails.Message);
- // ContainerBuilder securityServiceContainer = new Builder().UseContainer().WithName(this.SecurityServiceContainerName)
- // .WithEnvironment(environmentVariables.ToArray())
- // .UseImageDetails(imageDetails.Data)
- // .MountHostFolder(this.DockerPlatform, this.HostTraceFolder)
- // .SetDockerCredentials(this.DockerCredentials);
-
- // Int32? hostPort = this.GetHostPort(ContainerType.SecurityService);
- // if (hostPort == null)
- // {
- // securityServiceContainer = securityServiceContainer.ExposePort(DockerPorts.SecurityServiceDockerPort);
- // }
- // else
- // {
- // securityServiceContainer = securityServiceContainer.ExposePort(hostPort.Value, DockerPorts.SecurityServiceDockerPort);
- // }
-
- // // Now build and return the container
- // return securityServiceContainer;
- //}
-
String Serialise(Object arg)
{
return StringSerialiser.Serialise