diff --git a/EstateManagementUI.BusinessLogic.Tests/ApiClientTests.cs b/EstateManagementUI.BusinessLogic.Tests/ApiClientTests.cs index b576fbbb..bb1533f2 100644 --- a/EstateManagementUI.BusinessLogic.Tests/ApiClientTests.cs +++ b/EstateManagementUI.BusinessLogic.Tests/ApiClientTests.cs @@ -5,7 +5,11 @@ using EstateReportingAPI.Client; using EstateReportingAPI.DataTransferObjects; using FileProcessor.Client; +using Microsoft.Extensions.Configuration; using Moq; +using SecurityService.Client; +using SecurityService.DataTransferObjects.Responses; +using Shared.General; using Shared.Logger; using Shouldly; using SimpleResults; @@ -26,6 +30,7 @@ public class ApiClientTests { private readonly Mock TransactionProcessorClient; private readonly Mock FileProcessorClient; private readonly Mock EstateReportingApiClient; + private readonly Mock SecurityServiceClient; public ApiClientTests() { Logger.Initialise(NullLogger.Instance); @@ -33,13 +38,17 @@ public ApiClientTests() { this.TransactionProcessorClient = new Mock(); this.FileProcessorClient = new Mock(); this.EstateReportingApiClient = new Mock(); - - this.ApiClient = new ApiClient(this.TransactionProcessorClient.Object, this.FileProcessorClient.Object, this.EstateReportingApiClient.Object); + this.SecurityServiceClient = new Mock(); + IConfigurationRoot configurationRoot = new ConfigurationBuilder().AddInMemoryCollection(TestData.DefaultAppSettings).Build(); + ConfigurationReader.Initialise(configurationRoot); + this.ApiClient = new ApiClient(this.TransactionProcessorClient.Object, this.FileProcessorClient.Object, this.EstateReportingApiClient.Object, + this.SecurityServiceClient.Object); } [Fact] public async Task ApiClient_GetEstate_EstateReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.GetEstate(It.IsAny(), It.IsAny(), It.IsAny())) .ReturnsAsync(Result.Success(TestData.EstateResponse)); @@ -69,6 +78,7 @@ public async Task ApiClient_GetEstate_ClientCallThrewException_ResultFailed() [Fact] public async Task ApiClient_GetMerchants_MerchantsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.GetMerchants(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.MerchantResponses)); var result = await this.ApiClient.GetMerchants(TestData.AccessToken, Guid.NewGuid(), TestData.EstateId, CancellationToken.None); @@ -102,6 +112,7 @@ public async Task ApiClient_GetMerchant_ClientCallFailed_ResultFailed() { [Fact] public async Task ApiClient_GetMerchant_MerchantReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.GetMerchant(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.MerchantResponse)); var result= await this.ApiClient.GetMerchant(TestData.AccessToken, Guid.NewGuid(), TestData.EstateId, TestData.Merchant1Id, CancellationToken.None); @@ -111,6 +122,7 @@ public async Task ApiClient_GetMerchant_MerchantReturned() { [Fact] public async Task ApiClient_GetOperators_OperatorsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.GetOperators(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.OperatorResponses)); var result = await this.ApiClient.GetOperators(TestData.AccessToken, Guid.NewGuid(), TestData.EstateId, CancellationToken.None); @@ -136,6 +148,7 @@ public async Task ApiClient_GetOperators_ClientCallFailed_ResultFailed() { [Fact] public async Task ApiClient_GetOperator_OperatorIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.GetOperator(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.OperatorResponse)); Result @operator = await this.ApiClient.GetOperator(TestData.AccessToken, Guid.NewGuid(), TestData.EstateId, TestData.Operator1Id, CancellationToken.None); @@ -154,6 +167,7 @@ public async Task ApiClient_GetOperator_ClientCallFailed_ResultFailed() { [Fact] public async Task ApiClient_GetContracts_ContractsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.GetContracts(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.ContractResponses)); @@ -181,6 +195,7 @@ public async Task ApiClient_GetContracts_ClientCallFailed_ResultFailed() [Fact] public async Task ApiClient_GetContract_ContractIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.GetContract(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.ContractResponse1)); var result = await this.ApiClient.GetContract(TestData.AccessToken, Guid.NewGuid(), TestData.EstateId, TestData.Contract1Id, CancellationToken.None); @@ -209,6 +224,7 @@ public async Task ApiClient_GetContract_ClientCallFailed_ResultFailed() [Fact] public async Task ApiClient_CreateOperator_OperatorIsCreated() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.CreateOperator(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success); CreateOperatorModel createOperatorModel = new() { RequireCustomMerchantNumber = TestData.RequireCustomMerchantNumber, RequireCustomTerminalNumber = TestData.RequireCustomTerminalNumber, OperatorName = TestData.Operator1Name, OperatorId = TestData.Operator1Id }; @@ -232,6 +248,7 @@ public async Task ApiClient_CreateOperator_ErrorAtServer_OperatorIsNotCreated() [Fact] public async Task ApiClient_UpdateOperator_OperatorIsUpdated() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.UpdateOperator(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success()); UpdateOperatorModel updateOperatorModel = new() { RequireCustomMerchantNumber = TestData.RequireCustomMerchantNumber, RequireCustomTerminalNumber = TestData.RequireCustomTerminalNumber, OperatorName = TestData.Operator1Name, OperatorId = TestData.Operator1Id }; @@ -254,6 +271,7 @@ public async Task ApiClient_UpdateOperator_ErrorAtServer_OperatorIsNotUpdated() [Fact] public async Task ApiClient_GetFileImportLogList_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.FileProcessorClient.Setup(e => e.GetFileImportLogs(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync( Result.Success(TestData.FileImportLogList)); Result> result = await this.ApiClient.GetFileImportLogList(TestData.AccessToken, Guid.NewGuid(), TestData.EstateId, TestData.Merchant1Id, TestData.FileImportLogQueryStartDate, TestData.FileImportLogQueryEndDate, CancellationToken.None); @@ -274,6 +292,7 @@ public async Task ApiClient_GetFileImportLogList_ErrorAtServer_NoDataIsReturned( [Fact] public async Task ApiClient_GetFileImportLog_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.FileProcessorClient.Setup(e => e.GetFileImportLog(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync( Result.Success(TestData.FileImportLog1)); Result result = await this.ApiClient.GetFileImportLog(TestData.AccessToken, Guid.NewGuid(), TestData.EstateId, TestData.Merchant1Id, TestData.FileImportLogId, CancellationToken.None); @@ -291,6 +310,7 @@ public async Task ApiClient_GetFileImportLog_ErrorAtServer_NoDataIsReturned() { [Fact] public async Task ApiClient_GetFileDetails_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.FileProcessorClient.Setup(e => e.GetFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.FileDetails1)); Result result = await this.ApiClient.GetFileDetails(TestData.AccessToken, Guid.NewGuid(), TestData.EstateId, TestData.FileId1, CancellationToken.None); @@ -309,6 +329,7 @@ public async Task ApiClient_GetFileDetails_ErrorAtServer_NoDataIsReturned() { [Fact] public async Task ApiClient_GetComparisonDates_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.EstateReportingApiClient.Setup(e => e.GetComparisonDates(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.ComparisonDates)); Result> result = await this.ApiClient.GetComparisonDates(TestData.AccessToken, Guid.NewGuid(), TestData.EstateId, CancellationToken.None); @@ -325,6 +346,7 @@ public async Task ApiClient_GetComparisonDates_ErrorAtServer_NoDataIsReturned() [Fact] public async Task ApiClient_GetTodaysSales_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.EstateReportingApiClient.Setup(e => e.GetTodaysSales(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(TestData.TodaysSales); Result result = await this.ApiClient.GetTodaysSales(TestData.AccessToken, Guid.NewGuid(), TestData.EstateId, null, null, TestData.ComparisonDate, CancellationToken.None); @@ -341,6 +363,7 @@ public async Task ApiClient_GetTodaysSales_ErrorAtServer_NoDataIsReturned() { [Fact] public async Task ApiClient_GetTodaysSettlement_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.EstateReportingApiClient.Setup(e => e.GetTodaysSettlement(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(TestData.TodaysSettlement); Result result = await this.ApiClient.GetTodaysSettlement(TestData.AccessToken, Guid.NewGuid(), TestData.EstateId, null, null, TestData.ComparisonDate, CancellationToken.None); @@ -357,6 +380,7 @@ public async Task ApiClient_GetTodaysSettlement_ErrorAtServer_NoDataIsReturned() [Fact] public async Task ApiClient_GetTodaysSalesCountByHour_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.EstateReportingApiClient.Setup(e => e.GetTodaysSalesCountByHour(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(TestData.TodaysSalesCountByHour); Result> result = await this.ApiClient.GetTodaysSalesCountByHour(TestData.AccessToken, Guid.NewGuid(), TestData.EstateId, TestData.Merchant1Id, TestData.Operator1Id, TestData.ComparisonDate, CancellationToken.None); @@ -373,6 +397,7 @@ public async Task ApiClient_GetTodaysSalesCountByHour_ErrorAtServer_NoDataIsRetu [Fact] public async Task ApiClient_GetTodaysSalesValueByHour_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.EstateReportingApiClient.Setup(e => e.GetTodaysSalesValueByHour(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(TestData.TodaysSalesValueByHour); Result> result = await this.ApiClient.GetTodaysSalesValueByHour(TestData.AccessToken, Guid.NewGuid(), TestData.EstateId, TestData.Merchant1Id, TestData.Operator1Id, TestData.ComparisonDate, CancellationToken.None); @@ -389,6 +414,7 @@ public async Task ApiClient_GetTodaysSalesValueByHour_ErrorAtServer_NoDataIsRetu [Fact] public async Task ApiClient_GetMerchantKpi_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.EstateReportingApiClient.Setup(e => e.GetMerchantKpi(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(TestData.MerchantKpi); Result result = await this.ApiClient.GetMerchantKpi(TestData.AccessToken, TestData.EstateId, CancellationToken.None); @@ -406,6 +432,7 @@ public async Task ApiClient_GetMerchantKpi_ErrorAtServer_NoDataIsReturned() { [Fact] public async Task ApiClient_GetTodaysFailedSales_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.EstateReportingApiClient.Setup(e => e.GetTodaysFailedSales(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(TestData.TodaysSales); Result result = await this.ApiClient.GetTodaysFailedSales(TestData.AccessToken, TestData.EstateId, "1009", TestData.ComparisonDate, CancellationToken.None); @@ -423,6 +450,7 @@ public async Task ApiClient_GetTodaysFailedSales_ErrorAtServer_NoDataIsReturned( [Fact] public async Task ApiClient_GetTopBottomMerchantData_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.EstateReportingApiClient.Setup(e => e.GetTopBottomMerchantData(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(TestData.TopBottomMerchantDataList); Result> result = await this.ApiClient.GetTopBottomMerchantData(TestData.AccessToken, TestData.EstateId, TopBottom.Bottom, 10, CancellationToken.None); @@ -439,6 +467,7 @@ public async Task ApiClient_GetTopBottomMerchantData_ErrorAtServer_NoDataIsRetur [Fact] public async Task ApiClient_GetTopBottomProductData_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.EstateReportingApiClient.Setup(e => e.GetTopBottomProductData(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(TestData.TopBottomProductDataList); Result> result = await this.ApiClient.GetTopBottomProductData(TestData.AccessToken, TestData.EstateId, TopBottom.Bottom, 10, CancellationToken.None); @@ -455,6 +484,7 @@ public async Task ApiClient_GetTopBottomProductData_ErrorAtServer_NoDataIsReturn [Fact] public async Task ApiClient_GetTopBottomOperatorData_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.EstateReportingApiClient.Setup(e => e.GetTopBottomOperatorData(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(TestData.TopBottomOperatorDataList); Result> result = await this.ApiClient.GetTopBottomOperatorData(TestData.AccessToken, TestData.EstateId, TopBottom.Bottom, 10, CancellationToken.None); @@ -471,6 +501,7 @@ public async Task ApiClient_GetTopBottomOperatorData_ErrorAtServer_NoDataIsRetur [Fact] public async Task ApiClient_GetLastSettlement_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.EstateReportingApiClient.Setup(e => e.GetLastSettlement(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(TestData.LastSettlement); Result result = await this.ApiClient.GetLastSettlement(TestData.AccessToken, TestData.EstateId, null, null, CancellationToken.None); @@ -487,6 +518,7 @@ public async Task ApiClient_GetLastSettlement_ErrorAtServer_NoDataIsReturned() { [Fact] public async Task ApiClient_CreateMerchant_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.CreateMerchant(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success); Result result = await this.ApiClient.CreateMerchant(TestData.AccessToken, Guid.Empty, TestData.EstateId, TestData.CreateMerchantModel(SettlementSchedule.Immediate), CancellationToken.None); @@ -513,6 +545,7 @@ public async Task ApiClient_CreateMerchant_ClientThrowsException_ResultIsFailed( [Fact] public async Task ApiClient_UpdateMerchant_MerchantIsUpdated() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.UpdateMerchant(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success); Result result = await this.ApiClient.UpdateMerchant(TestData.AccessToken, Guid.Empty, TestData.EstateId, TestData.Merchant1Id, TestData.UpdateMerchantModel(SettlementSchedule.Immediate), CancellationToken.None); @@ -531,6 +564,7 @@ public async Task ApiClient_UpdateMerchant_ErrorAtServer_ResultIsFailed() [Fact] public async Task ApiClient_UpdateMerchantAddress_MerchantAddressIsUpdated() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.UpdateMerchantAddress(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny
(), It.IsAny())).ReturnsAsync(Result.Success); Result result = await this.ApiClient.UpdateMerchantAddress(TestData.AccessToken, Guid.Empty, TestData.EstateId, TestData.Merchant1Id, TestData.AddressModel, CancellationToken.None); @@ -549,6 +583,7 @@ public async Task ApiClient_UpdateMerchantAddress_ErrorAtServer_ResultIsFailed() [Fact] public async Task ApiClient_UpdateMerchantContact_MerchantContactIsUpdated() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.UpdateMerchantContact(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success); Result result = await this.ApiClient.UpdateMerchantContact(TestData.AccessToken, Guid.Empty, TestData.EstateId, TestData.Merchant1Id, TestData.ContactModel, CancellationToken.None); @@ -565,8 +600,8 @@ public async Task ApiClient_UpdateMerchantContact_ErrorAtServer_ResultIsFailed() } [Fact] - public async Task ApiClient_AssignContractToMerchant_ContractAssigned() - { + public async Task ApiClient_AssignContractToMerchant_ContractAssigned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.AddContractToMerchant(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success); Result result = await this.ApiClient.AssignContractToMerchant(TestData.AccessToken, Guid.Empty, TestData.EstateId, TestData.Merchant1Id, @@ -587,6 +622,7 @@ public async Task ApiClient_AssignContractToMerchant_ClientCallFailed_ResultIsFa [Fact] public async Task ApiClient_RemoveContractFromMerchant_ContractRemoved() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.RemoveContractFromMerchant(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success); Result result = await this.ApiClient.RemoveContractFromMerchant(TestData.AccessToken, Guid.Empty, TestData.EstateId, TestData.Merchant1Id, @@ -607,6 +643,7 @@ public async Task ApiClient_RemoveContractFromMerchant_ClientCallFailed_ResultIs [Fact] public async Task ApiClient_AssignOperatorToMerchant_OperatorAssigned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.AssignOperatorToMerchant(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success); Result result = await this.ApiClient.AssignOperatorToMerchant(TestData.AccessToken, Guid.Empty, TestData.EstateId, TestData.Merchant1Id, @@ -627,6 +664,7 @@ public async Task ApiClient_AssignOperatorToMerchant_ClientCallFailed_ResultIsFa [Fact] public async Task ApiClient_RemoveOperatorFromMerchant_OperatorRemoved() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.RemoveOperatorFromMerchant(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success); Result result = await this.ApiClient.RemoveOperatorFromMerchant(TestData.AccessToken, Guid.Empty, TestData.EstateId, TestData.Merchant1Id, @@ -647,6 +685,7 @@ public async Task ApiClient_RemoveOperatorFromMerchant_ClientCallFailed_ResultIs [Fact] public async Task ApiClient_AssignDeviceToMerchant_DeviceAssigned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.AddDeviceToMerchant(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success); Result result = await this.ApiClient.AssignDeviceToMerchant(TestData.AccessToken, Guid.Empty, TestData.EstateId, TestData.Merchant1Id, @@ -667,6 +706,7 @@ public async Task ApiClient_AssignDeviceToMerchant_ClientCallFailed_ResultIsFail [Fact] public async Task ApiClient_CreateContract_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.CreateContract(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success); Result result = await this.ApiClient.CreateContract(TestData.AccessToken, Guid.Empty, TestData.EstateId, TestData.CreateContractModel, CancellationToken.None); @@ -694,6 +734,7 @@ public async Task ApiClient_CreateContract_ClientThrowsException_ResultIsFailed( [Fact] public async Task ApiClient_MakeDeposit_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.MakeMerchantDeposit(It.IsAny(), It.IsAny(),It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success); Result result = await this.ApiClient.MakeDeposit(TestData.AccessToken, Guid.Empty, TestData.EstateId, TestData.Merchant1Id, TestData.MakeDepositModel, CancellationToken.None); @@ -721,6 +762,7 @@ public async Task ApiClient_MakeDeposit_ClientThrowsException_ResultIsFailed() [Fact] public async Task ApiClient_CreateContractProduct_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.AddProductToContract(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success); Result result = await this.ApiClient.CreateContractProduct(TestData.AccessToken, Guid.Empty, TestData.EstateId, TestData.Contract1Id, TestData.CreateContractProductModel, CancellationToken.None); @@ -748,6 +790,7 @@ public async Task ApiClient_CreateContractProduct_ClientThrowsException_ResultIs [Fact] public async Task ApiClient_CreateContractProductTransactionFee_DataIsReturned() { + this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TokenResponse.Create(TestData.AccessToken, TestData.AccessToken, 1000))); this.TransactionProcessorClient.Setup(e => e.AddTransactionFeeForProductToContract(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success); Result result = await this.ApiClient.CreateContractProductTransactionFee(TestData.AccessToken, Guid.Empty, TestData.EstateId, TestData.Contract1Id, TestData.Contract1Product1Id, TestData.CreateContractProductTransactionFeeModel, CancellationToken.None); diff --git a/EstateManagementUI.BusinessLogic/Clients/ApiClient.cs b/EstateManagementUI.BusinessLogic/Clients/ApiClient.cs index 6054b25d..e0f073b6 100644 --- a/EstateManagementUI.BusinessLogic/Clients/ApiClient.cs +++ b/EstateManagementUI.BusinessLogic/Clients/ApiClient.cs @@ -5,9 +5,14 @@ using EstateReportingAPI.DataTrasferObjects; using FileProcessor.Client; using FileProcessor.DataTransferObjects.Responses; +using SecurityService.Client; +using SecurityService.DataTransferObjects.Responses; +using Shared.General; using Shared.Logger; using Shared.Results; using SimpleResults; +using System.Runtime.CompilerServices; +using System.Threading; using TransactionProcessor.Client; using TransactionProcessor.DataTransferObjects.Requests.Contract; using TransactionProcessor.DataTransferObjects.Requests.Merchant; @@ -23,13 +28,16 @@ public class ApiClient : IApiClient { private readonly ITransactionProcessorClient TransactionProcessorClient; private readonly IFileProcessorClient FileProcessorClient; private readonly IEstateReportingApiClient EstateReportingApiClient; + private readonly ISecurityServiceClient SecurityServiceClient; public ApiClient(ITransactionProcessorClient transactionProcessorClient, IFileProcessorClient fileProcessorClient, - IEstateReportingApiClient estateReportingApiClient) { + IEstateReportingApiClient estateReportingApiClient, + ISecurityServiceClient securityServiceClient) { this.TransactionProcessorClient = transactionProcessorClient; this.FileProcessorClient = fileProcessorClient; this.EstateReportingApiClient = estateReportingApiClient; + this.SecurityServiceClient = securityServiceClient; } public async Task AssignOperatorToMerchant(String accessToken, @@ -38,10 +46,10 @@ public async Task AssignOperatorToMerchant(String accessToken, Guid merchantId, AssignOperatorToMerchantModel assignOperatorToMerchantModel, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) { + async Task ClientMethod(String token, CancellationToken ct) { AssignOperatorRequest apiRequest = ModelFactory.ConvertFrom(assignOperatorToMerchantModel); - return await this.TransactionProcessorClient.AssignOperatorToMerchant(accessToken, estateId, merchantId, apiRequest, ct); + return await this.TransactionProcessorClient.AssignOperatorToMerchant(token, estateId, merchantId, apiRequest, ct); } return await this.CallClientMethod(ClientMethod, cancellationToken); @@ -53,10 +61,10 @@ public async Task AssignContractToMerchant(String accessToken, Guid merchantId, AssignContractToMerchantModel assignContractToMerchantModel, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) { + async Task ClientMethod(String token, CancellationToken ct) { AddMerchantContractRequest apiRequest = ModelFactory.ConvertFrom(assignContractToMerchantModel); - return await this.TransactionProcessorClient.AddContractToMerchant(accessToken, estateId, merchantId, apiRequest, ct); + return await this.TransactionProcessorClient.AddContractToMerchant(token, estateId, merchantId, apiRequest, ct); } return await this.CallClientMethod(ClientMethod, cancellationToken); @@ -68,11 +76,11 @@ public async Task AssignDeviceToMerchant(String accessToken, Guid merchantId, AssignDeviceToMerchantModel assignDeviceToMerchantModel, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) + async Task ClientMethod(String token, CancellationToken ct) { AddMerchantDeviceRequest apiRequest = ModelFactory.ConvertFrom(assignDeviceToMerchantModel); - return await this.TransactionProcessorClient.AddDeviceToMerchant(accessToken, estateId, merchantId, apiRequest, ct); + return await this.TransactionProcessorClient.AddDeviceToMerchant(token, estateId, merchantId, apiRequest, ct); } return await this.CallClientMethod(ClientMethod, cancellationToken); @@ -84,8 +92,8 @@ public async Task RemoveOperatorFromMerchant(String accessToken, Guid merchantId, Guid operatorId, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) { - return await this.TransactionProcessorClient.RemoveOperatorFromMerchant(accessToken, estateId, merchantId, operatorId, ct); + async Task ClientMethod(String token, CancellationToken ct) { + return await this.TransactionProcessorClient.RemoveOperatorFromMerchant(token, estateId, merchantId, operatorId, ct); } ; @@ -99,8 +107,8 @@ public async Task RemoveContractFromMerchant(String accessToken, Guid merchantId, Guid contractId, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) { - return await this.TransactionProcessorClient.RemoveContractFromMerchant(accessToken, estateId, merchantId, contractId, ct); + async Task ClientMethod(String token, CancellationToken ct) { + return await this.TransactionProcessorClient.RemoveContractFromMerchant(token, estateId, merchantId, contractId, ct); } ; @@ -115,8 +123,8 @@ public async Task>> GetFileImportLogList(String DateTime startDate, DateTime endDate, CancellationToken cancellationToken) { - async Task>> ClientMethod(CancellationToken ct) { - Result? result = await this.FileProcessorClient.GetFileImportLogs(accessToken, estateId, startDate, endDate, merchantId, ct); + async Task>> ClientMethod(String token, CancellationToken ct) { + Result? result = await this.FileProcessorClient.GetFileImportLogs(token, estateId, startDate, endDate, merchantId, ct); if (result.IsFailed) return ResultHelpers.CreateFailure(result); return ModelFactory.ConvertFrom(result.Data); @@ -131,8 +139,8 @@ public async Task> GetEstate(String accessToken, CancellationToken cancellationToken) { Logger.LogWarning("in GetEstate"); - async Task> ClientMethod(CancellationToken ct) { - Result? result = await this.TransactionProcessorClient.GetEstate(accessToken, estateId, ct); + async Task> ClientMethod(String token, CancellationToken ct) { + Result? result = await this.TransactionProcessorClient.GetEstate(token, estateId, ct); if (result.IsFailed) return ResultHelpers.CreateFailure(result); return ModelFactory.ConvertFrom(result.Data); @@ -145,8 +153,8 @@ public async Task>> GetMerchants(String accessToken, Guid actionId, Guid estateId, CancellationToken cancellationToken) { - async Task>> ClientMethod(CancellationToken ct) { - Result>? result = await this.TransactionProcessorClient.GetMerchants(accessToken, estateId, ct); + async Task>> ClientMethod(String token, CancellationToken ct) { + Result>? result = await this.TransactionProcessorClient.GetMerchants(token, estateId, ct); if (result.IsFailed) return ResultHelpers.CreateFailure(result); return ModelFactory.ConvertFrom(result.Data); @@ -160,8 +168,8 @@ public async Task> GetMerchant(String accessToken, Guid estateId, Guid merchantId, CancellationToken cancellationToken) { - async Task> ClientMethod(CancellationToken ct) { - Result? result = await this.TransactionProcessorClient.GetMerchant(accessToken, estateId, merchantId, ct); + async Task> ClientMethod(String token, CancellationToken ct) { + Result? result = await this.TransactionProcessorClient.GetMerchant(token, estateId, merchantId, ct); if (result.IsFailed) return ResultHelpers.CreateFailure(result); return ModelFactory.ConvertFrom(result.Data); @@ -174,8 +182,8 @@ public async Task>> GetOperators(String accessToken, Guid actionId, Guid estateId, CancellationToken cancellationToken) { - async Task>> ClientMethod(CancellationToken ct) { - Result>? result = await this.TransactionProcessorClient.GetOperators(accessToken, estateId, ct); + async Task>> ClientMethod(String token, CancellationToken ct) { + Result>? result = await this.TransactionProcessorClient.GetOperators(token, estateId, ct); if (result.IsFailed) return ResultHelpers.CreateFailure(result); return ModelFactory.ConvertFrom(result.Data); @@ -189,8 +197,8 @@ public async Task> GetOperator(String accessToken, Guid estateId, Guid operatorId, CancellationToken cancellationToken) { - async Task> ClientMethod(CancellationToken ct) { - Result? result = await this.TransactionProcessorClient.GetOperator(accessToken, estateId, operatorId, ct); + async Task> ClientMethod(String token, CancellationToken ct) { + Result? result = await this.TransactionProcessorClient.GetOperator(token, estateId, operatorId, ct); if (result.IsFailed) return ResultHelpers.CreateFailure(result); return ModelFactory.ConvertFrom(result.Data); @@ -203,8 +211,8 @@ public async Task>> GetContracts(String accessToken, Guid actionId, Guid estateId, CancellationToken cancellationToken) { - async Task>> ClientMethod(CancellationToken ct) { - Result>? result = await this.TransactionProcessorClient.GetContracts(accessToken, estateId, ct); + async Task>> ClientMethod(String token, CancellationToken ct) { + Result>? result = await this.TransactionProcessorClient.GetContracts(token, estateId, ct); if (result.IsFailed) return ResultHelpers.CreateFailure(result); return ModelFactory.ConvertFrom(result.Data); @@ -218,8 +226,8 @@ public async Task> GetContract(String accessToken, Guid estateId, Guid contractId, CancellationToken cancellationToken) { - async Task> ClientMethod(CancellationToken ct) { - Result? result = await this.TransactionProcessorClient.GetContract(accessToken, estateId, contractId, ct); + async Task> ClientMethod(String token, CancellationToken ct) { + Result? result = await this.TransactionProcessorClient.GetContract(token, estateId, contractId, ct); if (result.IsFailed) return ResultHelpers.CreateFailure(result); return ModelFactory.ConvertFrom(result.Data); @@ -233,10 +241,10 @@ public async Task CreateOperator(String accessToken, Guid estateId, CreateOperatorModel createOperatorModel, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) { + async Task ClientMethod(String token, CancellationToken ct) { CreateOperatorRequest request = new() { RequireCustomMerchantNumber = createOperatorModel.RequireCustomMerchantNumber, RequireCustomTerminalNumber = createOperatorModel.RequireCustomTerminalNumber, Name = createOperatorModel.OperatorName, OperatorId = createOperatorModel.OperatorId }; - return await this.TransactionProcessorClient.CreateOperator(accessToken, estateId, request, ct); + return await this.TransactionProcessorClient.CreateOperator(token, estateId, request, ct); } return await this.CallClientMethod(ClientMethod, cancellationToken); @@ -247,10 +255,10 @@ public async Task UpdateOperator(String accessToken, Guid estateId, UpdateOperatorModel updateOperatorModel, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) { + async Task ClientMethod(String token, CancellationToken ct) { UpdateOperatorRequest request = new() { RequireCustomMerchantNumber = updateOperatorModel.RequireCustomMerchantNumber, RequireCustomTerminalNumber = updateOperatorModel.RequireCustomTerminalNumber, Name = updateOperatorModel.OperatorName }; - return await this.TransactionProcessorClient.UpdateOperator(accessToken, estateId, updateOperatorModel.OperatorId, request, ct); + return await this.TransactionProcessorClient.UpdateOperator(token, estateId, updateOperatorModel.OperatorId, request, ct); } return await this.CallClientMethod(ClientMethod, cancellationToken); @@ -262,8 +270,8 @@ public async Task> GetFileImportLog(String accessToke Guid merchantId, Guid fileImportLogId, CancellationToken cancellationToken) { - async Task> ClientMethod(CancellationToken ct) { - Result? result = await this.FileProcessorClient.GetFileImportLog(accessToken, fileImportLogId, estateId, merchantId, ct); + async Task> ClientMethod(String token, CancellationToken ct) { + Result? result = await this.FileProcessorClient.GetFileImportLog(token, fileImportLogId, estateId, merchantId, ct); if (result.IsFailed) return ResultHelpers.CreateFailure(result); return ModelFactory.ConvertFrom(result.Data); @@ -277,8 +285,8 @@ public async Task> GetFileDetails(String accessToken, Guid estateId, Guid fileId, CancellationToken cancellationToken) { - async Task> ClientMethod(CancellationToken ct) { - Result? result = await this.FileProcessorClient.GetFile(accessToken, estateId, fileId, ct); + async Task> ClientMethod(String token, CancellationToken ct) { + Result? result = await this.FileProcessorClient.GetFile(token, estateId, fileId, ct); if (result.IsFailed) return ResultHelpers.CreateFailure(result); return ModelFactory.ConvertFrom(result.Data); @@ -291,10 +299,10 @@ public async Task>> GetComparisonDates(String a Guid actionId, Guid estateId, CancellationToken cancellationToken) { - async Task>> ClientMethod(CancellationToken ct) + async Task>> ClientMethod(String token, CancellationToken ct) { - Result> apiResponse = await this.EstateReportingApiClient.GetComparisonDates(accessToken, estateId, ct); + Result> apiResponse = await this.EstateReportingApiClient.GetComparisonDates(token, estateId, ct); if (apiResponse.IsFailed) return ResultHelpers.CreateFailure(apiResponse); return ModelFactory.ConvertFrom(apiResponse.Data); @@ -310,8 +318,8 @@ public async Task> GetTodaysSales(String accessToken, Int32? operatorReportingId, DateTime comparisonDate, CancellationToken cancellationToken) { - async Task> ClientMethod(CancellationToken ct) { - Result apiResponse = await this.EstateReportingApiClient.GetTodaysSales(accessToken, estateId, merchantReportingId.GetValueOrDefault(0), operatorReportingId.GetValueOrDefault(0), comparisonDate, ct); + async Task> ClientMethod(String token, CancellationToken ct) { + Result apiResponse = await this.EstateReportingApiClient.GetTodaysSales(token, estateId, merchantReportingId.GetValueOrDefault(0), operatorReportingId.GetValueOrDefault(0), comparisonDate, ct); if (apiResponse.IsFailed) return ResultHelpers.CreateFailure(apiResponse); return ModelFactory.ConvertFrom(apiResponse.Data); @@ -327,8 +335,8 @@ public async Task> GetTodaysSettlement(String acce Int32? operatorReportingId, DateTime comparisonDate, CancellationToken cancellationToken) { - async Task> ClientMethod(CancellationToken ct) { - Result apiResponse = await this.EstateReportingApiClient.GetTodaysSettlement(accessToken, estateId, merchantReportingId.GetValueOrDefault(0), + async Task> ClientMethod(String token, CancellationToken ct) { + Result apiResponse = await this.EstateReportingApiClient.GetTodaysSettlement(token, estateId, merchantReportingId.GetValueOrDefault(0), operatorReportingId.GetValueOrDefault(0), comparisonDate, ct); if (apiResponse.IsFailed) return ResultHelpers.CreateFailure(apiResponse); @@ -345,8 +353,8 @@ public async Task>> GetTodaysSalesCount Guid? operatorId, DateTime comparisonDate, CancellationToken cancellationToken) { - async Task>> ClientMethod(CancellationToken ct) { - Result> apiResponse = await this.EstateReportingApiClient.GetTodaysSalesCountByHour(accessToken, estateId, 0, 0, comparisonDate, ct); + async Task>> ClientMethod(String token, CancellationToken ct) { + Result> apiResponse = await this.EstateReportingApiClient.GetTodaysSalesCountByHour(token, estateId, 0, 0, comparisonDate, ct); if (apiResponse.IsFailed) return ResultHelpers.CreateFailure(apiResponse); @@ -363,8 +371,8 @@ public async Task>> GetTodaysSalesValue Guid? operatorId, DateTime comparisonDate, CancellationToken cancellationToken) { - async Task>> ClientMethod(CancellationToken ct) { - Result> apiResponse = await this.EstateReportingApiClient.GetTodaysSalesValueByHour(accessToken, estateId, 0, 0, comparisonDate, ct); + async Task>> ClientMethod(String token, CancellationToken ct) { + Result> apiResponse = await this.EstateReportingApiClient.GetTodaysSalesValueByHour(token, estateId, 0, 0, comparisonDate, ct); if (apiResponse.IsFailed) return ResultHelpers.CreateFailure(apiResponse); @@ -374,10 +382,14 @@ async Task>> ClientMethod(CancellationT return await this.CallClientMethod(ClientMethod, cancellationToken); } - private async Task> CallClientMethod(Func>> clientMethod, + private async Task> CallClientMethod(Func>> clientMethod, CancellationToken cancellationToken) { try { - Result clientResult = await clientMethod(cancellationToken); + Result token = await GetToken(cancellationToken); + if (token.IsFailed) + return ResultHelpers.CreateFailure(token); + + Result clientResult = await clientMethod(token.Data.AccessToken, cancellationToken); return clientResult; } catch (Exception e) { @@ -385,11 +397,15 @@ private async Task> CallClientMethod(Func CallClientMethod(Func> clientMethod, - CancellationToken cancellationToken) { + + private async Task CallClientMethod(Func> clientMethod, + CancellationToken cancellationToken) { try { - Result clientResult = await clientMethod(cancellationToken); + Result token = await GetToken(cancellationToken); + if (token.IsFailed) + return ResultHelpers.CreateFailure(token); + + Result clientResult = await clientMethod(token.Data.AccessToken, cancellationToken); return clientResult; } catch (Exception e) { @@ -403,8 +419,8 @@ public async Task> GetTodaysFailedSales(String accessTo String responseCode, DateTime comparisonDate, CancellationToken cancellationToken) { - async Task> ClientMethod(CancellationToken ct) { - Result apiResponse = await this.EstateReportingApiClient.GetTodaysFailedSales(accessToken, estateId, 0, 0, responseCode, comparisonDate, ct); + async Task> ClientMethod(String token, CancellationToken ct) { + Result apiResponse = await this.EstateReportingApiClient.GetTodaysFailedSales(token, estateId, 0, 0, responseCode, comparisonDate, ct); if (apiResponse.IsFailed) return ResultHelpers.CreateFailure(apiResponse); return ModelFactory.ConvertFrom(apiResponse.Data); @@ -418,8 +434,8 @@ public async Task>> GetTopBottomOperator TopBottom topBottom, Int32 resultCount, CancellationToken cancellationToken) { - async Task>> ClientMethod(CancellationToken ct) { - Result> apiResponse = await this.EstateReportingApiClient.GetTopBottomOperatorData(accessToken, estateId, topBottom, resultCount, ct); + async Task>> ClientMethod(String token, CancellationToken ct) { + Result> apiResponse = await this.EstateReportingApiClient.GetTopBottomOperatorData(token, estateId, topBottom, resultCount, ct); if (apiResponse.IsFailed) return ResultHelpers.CreateFailure(apiResponse); return ModelFactory.ConvertFrom(apiResponse.Data); @@ -433,8 +449,8 @@ public async Task>> GetTopBottomMerchant TopBottom topBottom, Int32 resultCount, CancellationToken cancellationToken) { - async Task>> ClientMethod(CancellationToken ct) { - Result> apiResponse = await this.EstateReportingApiClient.GetTopBottomMerchantData(accessToken, estateId, topBottom, resultCount, ct); + async Task>> ClientMethod(String token, CancellationToken ct) { + Result> apiResponse = await this.EstateReportingApiClient.GetTopBottomMerchantData(token, estateId, topBottom, resultCount, ct); if (apiResponse.IsFailed) return ResultHelpers.CreateFailure(apiResponse); return ModelFactory.ConvertFrom(apiResponse.Data); @@ -448,8 +464,8 @@ public async Task>> GetTopBottomProductDa TopBottom topBottom, Int32 resultCount, CancellationToken cancellationToken) { - async Task>> ClientMethod(CancellationToken ct) { - Result> apiResponse = await this.EstateReportingApiClient.GetTopBottomProductData(accessToken, estateId, topBottom, resultCount, ct); + async Task>> ClientMethod(String token, CancellationToken ct) { + Result> apiResponse = await this.EstateReportingApiClient.GetTopBottomProductData(token, estateId, topBottom, resultCount, ct); if (apiResponse.IsFailed) return ResultHelpers.CreateFailure(apiResponse); return ModelFactory.ConvertFrom(apiResponse.Data); @@ -461,8 +477,8 @@ async Task>> ClientMethod(CancellationTok public async Task> GetMerchantKpi(String accessToken, Guid estateId, CancellationToken cancellationToken) { - async Task> ClientMethod(CancellationToken ct) { - Result apiResponse = await this.EstateReportingApiClient.GetMerchantKpi(accessToken, estateId, ct); + async Task> ClientMethod(String token, CancellationToken ct) { + Result apiResponse = await this.EstateReportingApiClient.GetMerchantKpi(token, estateId, ct); if (apiResponse.IsFailed) return ResultHelpers.CreateFailure(apiResponse); return ModelFactory.ConvertFrom(apiResponse.Data); @@ -483,8 +499,8 @@ public async Task> GetLastSettlement(String accessTo Int32? merchantReportingId, Int32? operatorReportingId, CancellationToken cancellationToken) { - async Task> ClientMethod(CancellationToken ct) { - Result apiResponse = await this.EstateReportingApiClient.GetLastSettlement(accessToken, estateId, ct); + async Task> ClientMethod(String token, CancellationToken ct) { + Result apiResponse = await this.EstateReportingApiClient.GetLastSettlement(token, estateId, ct); if (apiResponse.IsFailed) return ResultHelpers.CreateFailure(apiResponse); return ModelFactory.ConvertFrom(apiResponse.Data); @@ -499,10 +515,10 @@ public async Task CreateContract(String accessToken, CreateContractModel createContractModel, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) + async Task ClientMethod(String token, CancellationToken ct) { CreateContractRequest apiRequest = ModelFactory.ConvertFrom(createContractModel); - return await this.TransactionProcessorClient.CreateContract(accessToken, estateId, apiRequest, ct); + return await this.TransactionProcessorClient.CreateContract(token, estateId, apiRequest, ct); } return await this.CallClientMethod(ClientMethod, cancellationToken); } @@ -511,10 +527,10 @@ public async Task CreateMerchant(String accessToken, Guid estateId, CreateMerchantModel createMerchantModel, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) { + async Task ClientMethod(String token, CancellationToken ct) { CreateMerchantRequest apiRequest = ModelFactory.ConvertFrom(createMerchantModel); - return await this.TransactionProcessorClient.CreateMerchant(accessToken, estateId, apiRequest, ct); + return await this.TransactionProcessorClient.CreateMerchant(token, estateId, apiRequest, ct); } return await this.CallClientMethod(ClientMethod, cancellationToken); @@ -526,10 +542,10 @@ public async Task UpdateMerchant(String accessToken, Guid merchantId, UpdateMerchantModel updateMerchantModel, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) { + async Task ClientMethod(String token, CancellationToken ct) { UpdateMerchantRequest apiRequest = ModelFactory.ConvertFrom(updateMerchantModel); - return await this.TransactionProcessorClient.UpdateMerchant(accessToken, estateId, merchantId, apiRequest, ct); + return await this.TransactionProcessorClient.UpdateMerchant(token, estateId, merchantId, apiRequest, ct); } return await this.CallClientMethod(ClientMethod, cancellationToken); @@ -541,10 +557,10 @@ public async Task UpdateMerchantAddress(String accessToken, Guid merchantId, AddressModel updateAddressModel, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) { + async Task ClientMethod(String token, CancellationToken ct) { Address apiRequest = ModelFactory.ConvertFrom(updateAddressModel); - return await this.TransactionProcessorClient.UpdateMerchantAddress(accessToken, estateId, merchantId, updateAddressModel.AddressId, apiRequest, ct); + return await this.TransactionProcessorClient.UpdateMerchantAddress(token, estateId, merchantId, updateAddressModel.AddressId, apiRequest, ct); } return await this.CallClientMethod(ClientMethod, cancellationToken); @@ -556,10 +572,10 @@ public async Task UpdateMerchantContact(String accessToken, Guid merchantId, ContactModel updateContactModel, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) { + async Task ClientMethod(String token, CancellationToken ct) { Contact apiRequest = ModelFactory.ConvertFrom(updateContactModel); - return await this.TransactionProcessorClient.UpdateMerchantContact(accessToken, estateId, merchantId, updateContactModel.ContactId, apiRequest, ct); + return await this.TransactionProcessorClient.UpdateMerchantContact(token, estateId, merchantId, updateContactModel.ContactId, apiRequest, ct); } return await this.CallClientMethod(ClientMethod, cancellationToken); @@ -571,11 +587,11 @@ public async Task MakeDeposit(String accessToken, Guid merchantId, MakeDepositModel makeDepositModel, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) + async Task ClientMethod(String token, CancellationToken ct) { MakeMerchantDepositRequest apiRequest = ModelFactory.ConvertFrom(makeDepositModel); - return await this.TransactionProcessorClient.MakeMerchantDeposit(accessToken, estateId, merchantId, apiRequest, ct); + return await this.TransactionProcessorClient.MakeMerchantDeposit(token, estateId, merchantId, apiRequest, ct); } return await this.CallClientMethod(ClientMethod, cancellationToken); @@ -587,11 +603,11 @@ public async Task CreateContractProduct(String accessToken, Guid contractId, CreateContractProductModel createContractProductModel, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) + async Task ClientMethod(String token, CancellationToken ct) { AddProductToContractRequest apiRequest = ModelFactory.ConvertFrom(createContractProductModel); - return await this.TransactionProcessorClient.AddProductToContract(accessToken, estateId, contractId, apiRequest, ct); + return await this.TransactionProcessorClient.AddProductToContract(token, estateId, contractId, apiRequest, ct); } return await this.CallClientMethod(ClientMethod, cancellationToken); @@ -604,12 +620,46 @@ public async Task CreateContractProductTransactionFee(String accessToken Guid productId, CreateContractProductTransactionFeeModel createContractProductTransactionFeeModel, CancellationToken cancellationToken) { - async Task ClientMethod(CancellationToken ct) { + async Task ClientMethod(String token, CancellationToken ct) { AddTransactionFeeForProductToContractRequest apiRequest = ModelFactory.ConvertFrom(createContractProductTransactionFeeModel); - return await this.TransactionProcessorClient.AddTransactionFeeForProductToContract(accessToken, estateId, contractId, productId, apiRequest, ct); + return await this.TransactionProcessorClient.AddTransactionFeeForProductToContract(token, estateId, contractId, productId, apiRequest, ct); } return await this.CallClientMethod(ClientMethod, cancellationToken); } + + private TokenResponse TokenResponse; + + private async Task> GetToken(CancellationToken cancellationToken) + { + // Get a token to talk to the estate service + String clientId = ConfigurationReader.GetValue("AppSettings", "BackEndClientId"); + String clientSecret = ConfigurationReader.GetValue("AppSettings", "BackEndClientSecret"); + Logger.LogDebug($"Client Id is {clientId}"); + Logger.LogDebug($"Client Secret is {clientSecret}"); + + if (this.TokenResponse == null) + { + Result tokenResult = await this.SecurityServiceClient.GetToken(clientId, clientSecret, cancellationToken); + if (tokenResult.IsFailed) + return ResultHelpers.CreateFailure(tokenResult); + TokenResponse token = tokenResult.Data; + Logger.LogDebug($"Token is {token.AccessToken}"); + this.TokenResponse = token; + } + + if (this.TokenResponse.Expires.UtcDateTime.Subtract(DateTime.UtcNow) < TimeSpan.FromMinutes(2)) + { + Logger.LogDebug($"Token is about to expire at {this.TokenResponse.Expires.DateTime:O}"); + Result tokenResult = await this.SecurityServiceClient.GetToken(clientId, clientSecret, cancellationToken); + if (tokenResult.IsFailed) + return ResultHelpers.CreateFailure(tokenResult); + TokenResponse token = tokenResult.Data; + Logger.LogDebug($"Token is {token.AccessToken}"); + this.TokenResponse = token; + } + + return Result.Success(this.TokenResponse); + } } \ No newline at end of file diff --git a/EstateManagementUI.BusinessLogic/EstateManagementUI.BusinessLogic.csproj b/EstateManagementUI.BusinessLogic/EstateManagementUI.BusinessLogic.csproj index 96af5303..81e9e634 100644 --- a/EstateManagementUI.BusinessLogic/EstateManagementUI.BusinessLogic.csproj +++ b/EstateManagementUI.BusinessLogic/EstateManagementUI.BusinessLogic.csproj @@ -7,7 +7,7 @@ - + all @@ -18,11 +18,12 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + + - - + + diff --git a/EstateManagementUI.IntegrationTests/Common/DockerHelper.cs b/EstateManagementUI.IntegrationTests/Common/DockerHelper.cs index f306bfcd..b05b2811 100644 --- a/EstateManagementUI.IntegrationTests/Common/DockerHelper.cs +++ b/EstateManagementUI.IntegrationTests/Common/DockerHelper.cs @@ -1,11 +1,5 @@ using System; using System.Collections.Generic; -using Ductus.FluentDocker.Builders; -using Ductus.FluentDocker.Common; -using Ductus.FluentDocker.Executors; -using Ductus.FluentDocker.Extensions; -using Ductus.FluentDocker.Services; -using Ductus.FluentDocker.Services.Extensions; using EstateManagementUI.BusinessLogic.PermissionService; using EstateManagementUI.BusinessLogic.PermissionService.Database; using EstateManagementUI.BusinessLogic.PermissionService.Database.Entities; @@ -23,14 +17,19 @@ using System.IO; using System.Linq; using System.Net.Http; +using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; +using DotNet.Testcontainers.Builders; +using DotNet.Testcontainers.Containers; +using DotNet.Testcontainers.Networks; +using Shared.IntegrationTesting.TestContainers; using TransactionProcessor.Client; namespace EstateManagementUI.IntegrationTests.Common { - public class DockerHelper : global::Shared.IntegrationTesting.DockerHelper + public class DockerHelper : global::Shared.IntegrationTesting.TestContainers.DockerHelper { #region Fields @@ -76,7 +75,7 @@ public override void SetupContainerNames() { private static void AddEntryToHostsFile(String ipaddress, String hostname) { - if (FdOs.IsWindows()) + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { var hostsPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), @"drivers\etc\hosts"); using (StreamWriter w = File.AppendText(hostsPath)) @@ -84,7 +83,7 @@ private static void AddEntryToHostsFile(String ipaddress, w.WriteLine($"{ipaddress} {hostname}"); } } - else if (FdOs.IsLinux()) + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { DockerHelper.ExecuteBashCommand($"echo {ipaddress} {hostname} | sudo tee -a /etc/hosts"); } @@ -148,8 +147,8 @@ protected override List GetRequiredProjections() public override ContainerBuilder SetupTransactionProcessorContainer() { - List variables = new List(); - variables.Add($"OperatorConfiguration:PataPawaPrePay:Url=http://{this.TestHostContainerName}:{DockerPorts.TestHostPort}/api/patapawaprepay"); + Dictionary variables = new Dictionary(); + variables.Add($"OperatorConfiguration:PataPawaPrePay:Url",$"http://{this.TestHostContainerName}:{DockerPorts.TestHostPort}/api/patapawaprepay"); this.AdditionalVariables.Add(ContainerType.FileProcessor, variables); @@ -189,45 +188,55 @@ public override async Task StartContainersForScenarioRun(String scenarioName, Do this.ProjectionManagementClient = new EventStoreProjectionManagementClient(ConfigureEventStoreSettings()); } - private async Task StartEstateManagementUiContainer(List networkServices, + private async Task StartEstateManagementUiContainer(List networkServices, Int32 securityServiceContainerPort, Int32 securityServiceLocalPort) { TraceX("About to Start Estate Management UI Container"); - List environmentVariables = this.GetCommonEnvironmentVariables(); - environmentVariables.Add($"AppSettings:Authority=https://{this.SecurityServiceContainerName}:0"); // The port is set to 0 to stop defaulting to 443 - environmentVariables.Add($"AppSettings:SecurityServiceLocalPort={securityServiceLocalPort}"); - environmentVariables.Add($"AppSettings:SecurityServicePort={securityServiceContainerPort}"); - environmentVariables.Add("AppSettings:HttpClientIgnoreCertificateErrors=true"); + var environmentVariables = this.GetCommonEnvironmentVariables(); + + environmentVariables.Remove("AppSettings:ClientId"); + environmentVariables.Remove("AppSettings:ClientSecret"); + + environmentVariables.Add("AppSettings:Authority",$"https://{this.SecurityServiceContainerName}:0"); // The port is set to 0 to stop defaulting to 443 + environmentVariables.Add("AppSettings:SecurityServiceLocalPort",$"{securityServiceLocalPort}"); + environmentVariables.Add("AppSettings:SecurityServicePort",$"{securityServiceContainerPort}"); + environmentVariables.Add("AppSettings:HttpClientIgnoreCertificateErrors",$"true"); //environmentVariables.Add($"AppSettings:PermissionsBypass=true"); - environmentVariables.Add($"AppSettings:IsIntegrationTest=true"); - environmentVariables.Add($"ASPNETCORE_ENVIRONMENT=Development"); - environmentVariables.Add($"EstateManagementScope=estateManagement"); - environmentVariables.Add("urls=https://*:5004"); - environmentVariables.Add($"AppSettings:ClientId=estateUIClient"); - environmentVariables.Add($"AppSettings:ClientSecret=Secret1"); - environmentVariables.Add($"DataReloadConfig:DefaultInSeconds=1"); - environmentVariables.Add("AppSettings:HttpClientIgnoreCertificateErrors=true"); - environmentVariables.Add(this.SetConnectionString("ConnectionStrings:TransactionProcessorReadModel", "TransactionProcessorReadModel", this.UseSecureSqlServerDatabase)); + environmentVariables.Add("AppSettings:IsIntegrationTest","true"); + environmentVariables.Add("ASPNETCORE_ENVIRONMENT","Development"); + environmentVariables.Add("EstateManagementScope","estateManagement"); + environmentVariables.Add("urls","https://*:5004"); + environmentVariables.Add($"AppSettings:ClientId","estateUIClient"); + environmentVariables.Add($"AppSettings:ClientSecret","Secret1"); + environmentVariables.Add($"AppSettings:BackEndClientId", "serviceClient"); + environmentVariables.Add($"AppSettings:BackEndClientSecret", "Secret1"); + environmentVariables.Add($"DataReloadConfig:DefaultInSeconds","1"); + environmentVariables.Add("ConnectionStrings:TransactionProcessorReadModel", this.SetConnectionString( "TransactionProcessorReadModel", this.UseSecureSqlServerDatabase)); TraceX("About to Built Estate Management UI Container"); - ContainerBuilder containerBuilder = new Builder().UseContainer() - .WithName(this.EstateManagementUiContainerName) - .UseImageDetails(("estatemanagementui", false)) - .WithEnvironment(environmentVariables.ToArray()) - //.UseNetwork(networkServices.ToArray()) - .ExposePort(5004) - .MountHostFolder(this.DockerPlatform, this.HostTraceFolder) - .SetDockerCredentials(this.DockerCredentials); + ContainerBuilder containerBuilder = new ContainerBuilder() + .WithName(this.EstateManagementUiContainerName) + .WithImage("estatemanagementui") + .WithEnvironment(environmentVariables) + .MountHostFolder(this.DockerPlatform, this.HostTraceFolder) + //.UseNetwork(networkServices.ToArray()) + .WithPortBinding(5004); + //.MountHostFolder(this.DockerPlatform, this.HostTraceFolder) + //.SetDockerCredentials(this.DockerCredentials); TraceX("About to Call .Start()"); - IContainerService builtContainer = containerBuilder.Build(); + foreach (INetwork networkService in networkServices) { + containerBuilder = containerBuilder.WithNetwork(networkService); + } + + IContainer? builtContainer = containerBuilder.Build(); try{ - builtContainer.Start(); - builtContainer.WaitForPort("5004/tcp", 30000); - this.EstateManagementUiPort = builtContainer.ToHostExposedEndpoint($"5004/tcp").Port; + await builtContainer.StartAsync(); + //builtContainer.WaitForPort("5004/tcp", 30000); + this.EstateManagementUiPort = builtContainer.GetMappedPublicPort($"5004"); await Task.Delay(5000); @@ -317,23 +326,15 @@ private async Task StartEstateManagementUiContainer(List logs = builtContainer.Logs(true, CancellationToken.None); - IList xx = logs.ReadToEnd(); - while (xx.Any()) - { - foreach (String s in xx) - { - TraceX($"Logs|{s}"); - } - xx = logs.ReadToEnd(); - } + } TraceX("About to attach networkServices"); - foreach (INetworkService networkService in networkServices) - { - networkService.Attach(builtContainer, false); - } + //foreach (INetwork networkService in networkServices) + //{ + // //networkService..Attach(builtContainer, false); + // builtContainer. + //} //Trace("About to get port"); //// Do a health check here @@ -374,35 +375,38 @@ public override ContainerBuilder SetupSecurityServiceContainer() - 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}"); + var 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($"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)); + environmentVariables.Add("ConnectionStrings:PersistedGrantDbContext",this.SetConnectionString($"PersistedGrantStore-{this.TestId}", this.UseSecureSqlServerDatabase)); + environmentVariables.Add("ConnectionStrings:ConfigurationDbContext", this.SetConnectionString($"Configuration-{this.TestId}", this.UseSecureSqlServerDatabase)); + environmentVariables.Add("ConnectionStrings:AuthenticationDbContext",this.SetConnectionString($"Authentication-{this.TestId}", this.UseSecureSqlServerDatabase)); - environmentVariables.Add("Logging:LogLevel:Microsoft=Information"); - environmentVariables.Add("Logging:LogLevel:Default=Information"); - environmentVariables.Add("Logging:EventLog:LogLevel:Default=None"); + environmentVariables.Add("Logging:LogLevel:Microsoft","Information"); + environmentVariables.Add("Logging:LogLevel:Default","Information"); + environmentVariables.Add("Logging:EventLog:LogLevel:Default","None"); var imageDetailsResult = this.GetImageDetails(ContainerType.SecurityService); - ContainerBuilder securityServiceContainer = new Builder().UseContainer().WithName(this.SecurityServiceContainerName) - .WithEnvironment(environmentVariables.ToArray()) - .UseImageDetails(imageDetailsResult.Data) - .ExposePort(DockerPorts.SecurityServiceDockerPort) - .MountHostFolder(this.DockerPlatform, this.HostTraceFolder) - .SetDockerCredentials(this.DockerCredentials); - + ContainerBuilder securityServiceContainer = new ContainerBuilder() + .WithName(this.SecurityServiceContainerName) + .WithEnvironment(environmentVariables) + .WithImage(imageDetailsResult.Data.imageName) + .MountHostFolder(this.DockerPlatform, this.HostTraceFolder) + .WithPortBinding(DockerPorts.SecurityServiceDockerPort); + //.MountHostFolder(this.DockerPlatform, this.HostTraceFolder) + //.SetDockerCredentials(this.DockerCredentials); + + // Now build and return the container return securityServiceContainer; } diff --git a/EstateManagementUI.IntegrationTests/Common/GenericSteps.cs b/EstateManagementUI.IntegrationTests/Common/GenericSteps.cs index 1c0f2e24..59b16295 100644 --- a/EstateManagementUI.IntegrationTests/Common/GenericSteps.cs +++ b/EstateManagementUI.IntegrationTests/Common/GenericSteps.cs @@ -44,13 +44,10 @@ public async Task StartSystem() await Setup.GlobalSetup(this.TestingContext.DockerHelper); - this.TestingContext.DockerHelper.SqlServerContainer = Setup.DatabaseServerContainer; - this.TestingContext.DockerHelper.SqlServerNetwork = Setup.DatabaseServerNetwork; this.TestingContext.DockerHelper.DockerCredentials = Setup.DockerCredentials; this.TestingContext.DockerHelper.SqlCredentials = Setup.SqlCredentials; this.TestingContext.DockerHelper.SqlServerContainerName = "sharedsqlserver"; - - + this.TestingContext.Logger = logger; this.TestingContext.Logger.LogInformation("About to Start Containers for Scenario Run"); await this.TestingContext.DockerHelper.StartContainersForScenarioRun(scenarioName, dockerServices).ConfigureAwait(false); @@ -59,7 +56,7 @@ public async Task StartSystem() [AfterScenario(Order = 1)] public async Task StopSystem(){ - DockerServices sharedDockerServices = DockerServices.SqlServer; + DockerServices sharedDockerServices = DockerServices.None; await this.TestingContext.DockerHelper.StopContainersForScenarioRun(sharedDockerServices).ConfigureAwait(false); } } diff --git a/EstateManagementUI.IntegrationTests/Common/Setup.cs b/EstateManagementUI.IntegrationTests/Common/Setup.cs index 603d6d0b..b6899766 100644 --- a/EstateManagementUI.IntegrationTests/Common/Setup.cs +++ b/EstateManagementUI.IntegrationTests/Common/Setup.cs @@ -9,39 +9,12 @@ namespace EstateManagementUI.IntegrationTests.Common [Binding] public class Setup { - public static IContainerService DatabaseServerContainer; - public static INetworkService DatabaseServerNetwork; public static (String usename, String password) SqlCredentials = ("sa", "thisisalongpassword123!"); public static (String url, String username, String password) DockerCredentials = ("https://www.docker.com", "stuartferguson", "Sc0tland"); - static object padLock = new object(); // Object to lock on - public static async Task GlobalSetup(DockerHelper dockerHelper) { ShouldlyConfiguration.DefaultTaskTimeout = TimeSpan.FromMinutes(1); - dockerHelper.SqlCredentials = Setup.SqlCredentials; - dockerHelper.DockerCredentials = Setup.DockerCredentials; - dockerHelper.SqlServerContainerName = "sharedsqlserver"; - - lock (Setup.padLock) - { - Setup.DatabaseServerNetwork = dockerHelper.SetupTestNetwork("sharednetwork"); - - dockerHelper.Logger.LogInformation("in start SetupSqlServerContainer"); - Setup.DatabaseServerContainer = dockerHelper.SetupSqlServerContainer(Setup.DatabaseServerNetwork).Result; - } - } - - public static String GetConnectionString(String databaseName) - { - return $"server={Setup.DatabaseServerContainer.Name};database={databaseName};user id={Setup.SqlCredentials.usename};password={Setup.SqlCredentials.password}"; - } - - public static String GetLocalConnectionString(String databaseName) - { - Int32 databaseHostPort = Setup.DatabaseServerContainer.ToHostExposedEndpoint("1433/tcp").Port; - - return $"server=localhost,{databaseHostPort};database={databaseName};user id={Setup.SqlCredentials.usename};password={Setup.SqlCredentials.password}"; } } } \ No newline at end of file diff --git a/EstateManagementUI.IntegrationTests/EstateManagementUI.IntegrationTests.csproj b/EstateManagementUI.IntegrationTests/EstateManagementUI.IntegrationTests.csproj index 524cbdfe..0d603eea 100644 --- a/EstateManagementUI.IntegrationTests/EstateManagementUI.IntegrationTests.csproj +++ b/EstateManagementUI.IntegrationTests/EstateManagementUI.IntegrationTests.csproj @@ -30,8 +30,8 @@ - - + + @@ -39,17 +39,17 @@ - + - + - + - + - + diff --git a/EstateManagementUI.Testing/TestData.cs b/EstateManagementUI.Testing/TestData.cs index c0e902db..40d19884 100644 --- a/EstateManagementUI.Testing/TestData.cs +++ b/EstateManagementUI.Testing/TestData.cs @@ -27,7 +27,24 @@ namespace EstateManagementUI.Testing { public static class TestData { - + public static IReadOnlyDictionary DefaultAppSettings => + new Dictionary + { + ["AppSettings:ClientId"] = "clientId", + ["AppSettings:ClientSecret"] = "clientSecret", + ["AppSettings:BackEndClientId"] = "clientId", + ["AppSettings:BackEndClientSecret"] = "clientSecret", + ["AppSettings:UseConnectionStringConfig"] = "false", + ["EventStoreSettings:ConnectionString"] = "esdb://127.0.0.1:2113", + ["SecurityConfiguration:Authority"] = "https://127.0.0.1", + ["AppSettings:EstateManagementApi"] = "http://127.0.0.1", + ["AppSettings:SecurityService"] = "http://127.0.0.1", + ["AppSettings:ContractProductFeeCacheExpiryInHours"] = "", + ["AppSettings:ContractProductFeeCacheEnabled"] = "", + ["ConnectionStrings:HealthCheck"] = "HealthCheck", + ["ConnectionStrings:EstateReportingReadModel"] = "", + ["ConnectionStrings:TransactionProcessorReadModel"] = "" + }; public static DateTime ComparisonDate = new DateTime(2024,1,1); public static String AccessToken = "token1"; public static CorrelationId CorrelationId = CorrelationIdHelper.New(); diff --git a/EstateManagementUI/Bootstrapper/ClientRegistry.cs b/EstateManagementUI/Bootstrapper/ClientRegistry.cs index 4a7bfab9..b38df5ce 100644 --- a/EstateManagementUI/Bootstrapper/ClientRegistry.cs +++ b/EstateManagementUI/Bootstrapper/ClientRegistry.cs @@ -6,6 +6,7 @@ using System.Diagnostics.CodeAnalysis; using ClientProxyBase; using EstateReportingAPI.Client; +using SecurityService.Client; using TransactionProcessor.Client; namespace EstateManagementUI.Bootstrapper; @@ -21,6 +22,7 @@ public ClientRegistry() this.RegisterHttpClient(); this.RegisterHttpClient(); this.RegisterHttpClient(); + this.RegisterHttpClient(); this.AddSingleton>(container => (serviceName) => ConfigurationReader.GetBaseServerUri(serviceName).OriginalString); } } \ No newline at end of file diff --git a/EstateManagementUI/Common/DataHelperFunctions.cs b/EstateManagementUI/Common/DataHelperFunctions.cs index 3f696cdc..75bfc1dd 100644 --- a/EstateManagementUI/Common/DataHelperFunctions.cs +++ b/EstateManagementUI/Common/DataHelperFunctions.cs @@ -68,13 +68,10 @@ public static async Task GetOperatorsOld(CorrelationId correl Result> response = await mediator.Send(query, CancellationToken.None); List resultList = new(); - foreach (OperatorModel operatorModel in response.Data) - { - resultList.Add(new SelectListItem - { - Value = operatorModel.OperatorId.ToString(), - Text = operatorModel.Name - }); + if (response.IsSuccess) { + foreach (OperatorModel operatorModel in response.Data) { + resultList.Add(new SelectListItem { Value = operatorModel.OperatorId.ToString(), Text = operatorModel.Name }); + } } List ordered = resultList.OrderBy(m => m.Text).ToList(); @@ -108,13 +105,10 @@ public static async Task GetMerchants(CorrelationId correlati Result> response = await mediator.Send(query, CancellationToken.None); List resultList = new(); - foreach (MerchantModel merchantModel in response.Data) - { - resultList.Add(new SelectListItem - { - Value = merchantModel.MerchantId.ToString(), - Text = merchantModel.MerchantName, - }); + if (response.IsSuccess) { + foreach (MerchantModel merchantModel in response.Data) { + resultList.Add(new SelectListItem { Value = merchantModel.MerchantId.ToString(), Text = merchantModel.MerchantName, }); + } } List ordered = resultList.OrderBy(m => m.Text).ToList(); diff --git a/EstateManagementUI/EstateManagementUI.csproj b/EstateManagementUI/EstateManagementUI.csproj index e5ceea04..9afb5210 100644 --- a/EstateManagementUI/EstateManagementUI.csproj +++ b/EstateManagementUI/EstateManagementUI.csproj @@ -46,7 +46,7 @@ - + diff --git a/EstateManagementUI/appsettings.json b/EstateManagementUI/appsettings.json index adb80be2..390799ef 100644 --- a/EstateManagementUI/appsettings.json +++ b/EstateManagementUI/appsettings.json @@ -2,6 +2,8 @@ "AppSettings": { "ClientId": "managementUIClient", "ClientSecret": "d192cbc46d834d0da90e8a9d50ded543", + "BackEndClientId": "serviceClient", + "BackEndClientSecret": "d192cbc46d834d0da90e8a9d50ded543", "IsIntegrationTest": false, "PermissionKey": null, "DataReloadConfig": {