diff --git a/TransactionProcessorACL.Tests/General/ModelFactoryTests.cs b/TransactionProcessorACL.Tests/General/ModelFactoryTests.cs index dac7a90..b36718f 100644 --- a/TransactionProcessorACL.Tests/General/ModelFactoryTests.cs +++ b/TransactionProcessorACL.Tests/General/ModelFactoryTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Text; @@ -156,5 +156,104 @@ public void ModelFactory_ConvertFrom_RedeemVoucherResponse_NullValue_IsConverted dto.ShouldBeNull(); } + + [Fact] + public void ModelFactory_ConvertFrom_MerchantResponse_IsConverted() + { + ModelFactory modelFactory = new ModelFactory(); + + Models.MerchantResponse model = new Models.MerchantResponse + { + EstateId = TestData.EstateId, + MerchantId = TestData.MerchantId, + EstateReportingId = 123, + MerchantReportingId = 456, + MerchantName = TestData.MerchantName, + MerchantReference = "Reference", + NextStatementDate = TestData.GeneratedDateTime, + SettlementSchedule = Models.SettlementSchedule.Monthly, + Addresses = new List + { + new Models.AddressResponse + { + AddressId = Guid.NewGuid(), + AddressLine1 = TestData.AddressLine1, + AddressLine2 = TestData.AddressLine2, + AddressLine3 = TestData.AddressLine3, + AddressLine4 = TestData.AddressLine4, + Country = TestData.Country, + PostalCode = TestData.PostCode, + Region = TestData.Region, + Town = TestData.Town + } + }, + Contacts = new List + { + new Models.ContactResponse + { + ContactId = Guid.NewGuid(), + ContactName = TestData.ContactName, + ContactPhoneNumber = TestData.ContactPhone, + ContactEmailAddress = TestData.ContactEmail + } + }, + Contracts = new List + { + new Models.MerchantContractResponse + { + ContractId = TestData.ContractId, + IsDeleted = true, + ContractProducts = new List { TestData.ProductId } + } + }, + Devices = new Dictionary + { + { TestData.DeviceId, TestData.DeviceIdentifier } + }, + Operators = new List + { + new Models.MerchantOperatorResponse + { + OperatorId = TestData.OperatorId, + IsDeleted = true, + MerchantNumber = TestData.MerchantNumber, + Name = "Operator Name", + TerminalNumber = TestData.TerminalNumber + } + } + }; + + DataTransferObjects.Responses.MerchantResponse dto = modelFactory.ConvertFrom(model); + + dto.ShouldNotBeNull(); + dto.EstateId.ShouldBe(model.EstateId); + dto.MerchantId.ShouldBe(model.MerchantId); + dto.EstateReportingId.ShouldBe(model.EstateReportingId); + dto.MerchantReportingId.ShouldBe(model.MerchantReportingId); + dto.MerchantName.ShouldBe(model.MerchantName); + dto.MerchantReference.ShouldBe(model.MerchantReference); + dto.NextStatementDate.ShouldBe(model.NextStatementDate); + dto.SettlementSchedule.ShouldBe(DataTransferObjects.Responses.SettlementSchedule.Monthly); + dto.Addresses.Count.ShouldBe(1); + dto.Addresses[0].Town.ShouldBe(TestData.Town); + dto.Contacts.Count.ShouldBe(1); + dto.Contacts[0].ContactEmailAddress.ShouldBe(TestData.ContactEmail); + dto.Contracts.Count.ShouldBe(1); + dto.Contracts[0].ContractProducts.ShouldContain(TestData.ProductId); + dto.Devices[TestData.DeviceId].ShouldBe(TestData.DeviceIdentifier); + dto.Operators.Count.ShouldBe(1); + dto.Operators[0].TerminalNumber.ShouldBe(TestData.TerminalNumber); + } + + [Fact] + public void ModelFactory_ConvertFrom_MerchantResponse_NullValue_IsConverted() + { + ModelFactory modelFactory = new ModelFactory(); + + Models.MerchantResponse model = null; + DataTransferObjects.Responses.MerchantResponse dto = modelFactory.ConvertFrom(model); + + dto.ShouldBeNull(); + } } } diff --git a/TransactionProcessorACL/Factories/IModelFactory.cs b/TransactionProcessorACL/Factories/IModelFactory.cs index 4ea3a5b..44c148a 100644 --- a/TransactionProcessorACL/Factories/IModelFactory.cs +++ b/TransactionProcessorACL/Factories/IModelFactory.cs @@ -20,6 +20,8 @@ public interface IModelFactory GetVoucherResponseMessage ConvertFrom(GetVoucherResponse model); + DataTransferObjects.Responses.MerchantResponse ConvertFrom(Models.MerchantResponse model); + #endregion } -} \ No newline at end of file +} diff --git a/TransactionProcessorACL/Factories/ModelFactory.cs b/TransactionProcessorACL/Factories/ModelFactory.cs index 3ac54d6..fdd538b 100644 --- a/TransactionProcessorACL/Factories/ModelFactory.cs +++ b/TransactionProcessorACL/Factories/ModelFactory.cs @@ -1,5 +1,7 @@ -namespace TransactionProcessorACL.Factories +namespace TransactionProcessorACL.Factories { + using System; + using System.Collections.Generic; using DataTransferObjects.Responses; using Models; @@ -90,6 +92,94 @@ public GetVoucherResponseMessage ConvertFrom(GetVoucherResponse model) return responseMessage; } + public DataTransferObjects.Responses.MerchantResponse ConvertFrom(Models.MerchantResponse model) + { + if (model == null) + { + return null; + } + + DataTransferObjects.Responses.MerchantResponse merchantResponse = new DataTransferObjects.Responses.MerchantResponse + { + EstateId = model.EstateId, + MerchantId = model.MerchantId, + EstateReportingId = model.EstateReportingId, + MerchantName = model.MerchantName, + MerchantReference = model.MerchantReference, + MerchantReportingId = model.MerchantReportingId, + NextStatementDate = model.NextStatementDate, + SettlementSchedule = model.SettlementSchedule switch + { + Models.SettlementSchedule.Weekly => DataTransferObjects.Responses.SettlementSchedule.Weekly, + Models.SettlementSchedule.Monthly => DataTransferObjects.Responses.SettlementSchedule.Monthly, + _ => DataTransferObjects.Responses.SettlementSchedule.NotSet + }, + Addresses = new List(), + Contacts = new List(), + Contracts = new List(), + Devices = new Dictionary(), + Operators = new List() + }; + + foreach (Models.AddressResponse addressModel in model.Addresses) + { + merchantResponse.Addresses.Add(new DataTransferObjects.Responses.AddressResponse + { + AddressId = addressModel.AddressId, + AddressLine1 = addressModel.AddressLine1, + AddressLine2 = addressModel.AddressLine2, + AddressLine3 = addressModel.AddressLine3, + AddressLine4 = addressModel.AddressLine4, + Country = addressModel.Country, + PostalCode = addressModel.PostalCode, + Region = addressModel.Region, + Town = addressModel.Town + }); + } + + foreach (Models.ContactResponse contactModel in model.Contacts) + { + merchantResponse.Contacts.Add(new DataTransferObjects.Responses.ContactResponse + { + ContactId = contactModel.ContactId, + ContactName = contactModel.ContactName, + ContactPhoneNumber = contactModel.ContactPhoneNumber, + ContactEmailAddress = contactModel.ContactEmailAddress + }); + } + + foreach (Models.MerchantContractResponse merchantContractResponse in model.Contracts) + { + DataTransferObjects.Responses.MerchantContractResponse contract = new DataTransferObjects.Responses.MerchantContractResponse + { + ContractId = merchantContractResponse.ContractId, + IsDeleted = merchantContractResponse.IsDeleted, + ContractProducts = new List(merchantContractResponse.ContractProducts) + }; + + merchantResponse.Contracts.Add(contract); + } + + foreach (KeyValuePair device in model.Devices) + { + merchantResponse.Devices.Add(device.Key, device.Value); + } + + foreach (Models.MerchantOperatorResponse merchantOperatorResponse in model.Operators) + { + merchantResponse.Operators.Add(new DataTransferObjects.Responses.MerchantOperatorResponse + { + OperatorId = merchantOperatorResponse.OperatorId, + IsDeleted = merchantOperatorResponse.IsDeleted, + MerchantNumber = merchantOperatorResponse.MerchantNumber, + Name = merchantOperatorResponse.Name, + TerminalNumber = merchantOperatorResponse.TerminalNumber + }); + } + + return merchantResponse; + } + public RedeemVoucherResponseMessage ConvertFrom(RedeemVoucherResponse model) { if (model == null) @@ -113,4 +203,4 @@ public RedeemVoucherResponseMessage ConvertFrom(RedeemVoucherResponse model) #endregion } -} \ No newline at end of file +} diff --git a/TransactionProcessorACL/Handlers/MerchantHandlers.cs b/TransactionProcessorACL/Handlers/MerchantHandlers.cs index 397bc8b..954945f 100644 --- a/TransactionProcessorACL/Handlers/MerchantHandlers.cs +++ b/TransactionProcessorACL/Handlers/MerchantHandlers.cs @@ -11,6 +11,7 @@ using Shared.Results.Web; using SimpleResults; using TransactionProcessorACL.BusinessLogic.Requests; +using TransactionProcessorACL.Factories; using TransactionProcessorACL.Models; namespace TransactionProcessorACL.Handlers @@ -86,7 +87,11 @@ public static async Task GetMerchantContracts(IMediator mediator, Claim }); } - public static async Task GetMerchant(IMediator mediator, ClaimsPrincipal user, string applicationVersion, CancellationToken cancellationToken) + public static async Task GetMerchant(IMediator mediator, + IModelFactory modelFactory, + ClaimsPrincipal user, + string applicationVersion, + CancellationToken cancellationToken) { Logger.LogWarning("In GetMerchant Handler"); @@ -97,72 +102,7 @@ public static async Task GetMerchant(IMediator mediator, ClaimsPrincipa MerchantQueries.GetMerchantQuery query = new(claimsResult.Data.estateId, claimsResult.Data.merchantId); Result result = await mediator.Send(query, cancellationToken); - return ResponseFactory.FromResult(result, response => { - - DataTransferObjects.Responses.MerchantResponse merchantResponse = new() { - EstateId = result.Data.EstateId, - MerchantId = result.Data.MerchantId, - EstateReportingId = result.Data.EstateReportingId, - MerchantName = result.Data.MerchantName, - MerchantReference = result.Data.MerchantReference, - MerchantReportingId = result.Data.MerchantReportingId, - NextStatementDate = result.Data.NextStatementDate, - SettlementSchedule = result.Data.SettlementSchedule switch { - SettlementSchedule.Weekly => DataTransferObjects.Responses.SettlementSchedule.Weekly, - SettlementSchedule.Monthly => DataTransferObjects.Responses.SettlementSchedule.Monthly, - _ => DataTransferObjects.Responses.SettlementSchedule.NotSet - }, - Addresses = new(), - Contacts = new(), - Contracts = new(), - Devices = new(), - Operators = new() - }; - - foreach (AddressResponse addressModel in result.Data.Addresses) { - DataTransferObjects.Responses.AddressResponse addressResponse = new() { - AddressId = addressModel.AddressId, - AddressLine1 = addressModel.AddressLine1, - AddressLine2 = addressModel.AddressLine2, - AddressLine3 = addressModel.AddressLine3, - AddressLine4 = addressModel.AddressLine4, - Country = addressModel.Country, - PostalCode = addressModel.PostalCode, - Region = addressModel.Region, - Town = addressModel.Town - }; - merchantResponse.Addresses.Add(addressResponse); - } - - foreach (ContactResponse contactResponse in result.Data.Contacts) { - merchantResponse.Contacts.Add(new DataTransferObjects.Responses.ContactResponse { ContactId = contactResponse.ContactId, ContactName = contactResponse.ContactName, ContactPhoneNumber = contactResponse.ContactPhoneNumber, ContactEmailAddress = contactResponse.ContactEmailAddress }); - } - - foreach (MerchantContractResponse merchantContractResponse in result.Data.Contracts) { - DataTransferObjects.Responses.MerchantContractResponse contract = new() { ContractId = merchantContractResponse.ContractId, IsDeleted = merchantContractResponse.IsDeleted, ContractProducts = new() }; - foreach (Guid contractProduct in merchantContractResponse.ContractProducts) { - contract.ContractProducts.Add(contractProduct); - } - - merchantResponse.Contracts.Add(contract); - } - - foreach (KeyValuePair device in result.Data.Devices) { - merchantResponse.Devices.Add(device.Key, device.Value); - } - - foreach (MerchantOperatorResponse merchantOperatorResponse in result.Data.Operators) { - merchantResponse.Operators.Add(new DataTransferObjects.Responses.MerchantOperatorResponse { - OperatorId = merchantOperatorResponse.OperatorId, - IsDeleted = merchantOperatorResponse.IsDeleted, - MerchantNumber = merchantOperatorResponse.MerchantNumber, - Name = merchantOperatorResponse.Name, - TerminalNumber = merchantOperatorResponse.TerminalNumber - }); - } - - return merchantResponse; - }); + return ResponseFactory.FromResult(result, modelFactory.ConvertFrom); } } @@ -183,4 +123,4 @@ protected override Task HandleRequirementAsync( return Task.CompletedTask; } } -} \ No newline at end of file +}