Skip to content

Commit b911b9b

Browse files
fix: align merchant handlers with master changes
Co-authored-by: StuartFerguson <16325469+StuartFerguson@users.noreply.github.com>
1 parent 7f0e4e7 commit b911b9b

4 files changed

Lines changed: 204 additions & 73 deletions

File tree

TransactionProcessorACL.Tests/General/ModelFactoryTests.cs

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,5 +156,104 @@ public void ModelFactory_ConvertFrom_RedeemVoucherResponse_NullValue_IsConverted
156156

157157
dto.ShouldBeNull();
158158
}
159+
160+
[Fact]
161+
public void ModelFactory_ConvertFrom_MerchantResponse_IsConverted()
162+
{
163+
ModelFactory modelFactory = new ModelFactory();
164+
165+
Models.MerchantResponse model = new Models.MerchantResponse
166+
{
167+
EstateId = TestData.EstateId,
168+
MerchantId = TestData.MerchantId,
169+
EstateReportingId = 123,
170+
MerchantReportingId = 456,
171+
MerchantName = TestData.MerchantName,
172+
MerchantReference = "Reference",
173+
NextStatementDate = TestData.GeneratedDateTime,
174+
SettlementSchedule = Models.SettlementSchedule.Monthly,
175+
Addresses = new List<Models.AddressResponse>
176+
{
177+
new Models.AddressResponse
178+
{
179+
AddressId = Guid.NewGuid(),
180+
AddressLine1 = TestData.AddressLine1,
181+
AddressLine2 = TestData.AddressLine2,
182+
AddressLine3 = TestData.AddressLine3,
183+
AddressLine4 = TestData.AddressLine4,
184+
Country = TestData.Country,
185+
PostalCode = TestData.PostCode,
186+
Region = TestData.Region,
187+
Town = TestData.Town
188+
}
189+
},
190+
Contacts = new List<Models.ContactResponse>
191+
{
192+
new Models.ContactResponse
193+
{
194+
ContactId = Guid.NewGuid(),
195+
ContactName = TestData.ContactName,
196+
ContactPhoneNumber = TestData.ContactPhone,
197+
ContactEmailAddress = TestData.ContactEmail
198+
}
199+
},
200+
Contracts = new List<Models.MerchantContractResponse>
201+
{
202+
new Models.MerchantContractResponse
203+
{
204+
ContractId = TestData.ContractId,
205+
IsDeleted = true,
206+
ContractProducts = new List<Guid> { TestData.ProductId }
207+
}
208+
},
209+
Devices = new Dictionary<Guid, string>
210+
{
211+
{ TestData.DeviceId, TestData.DeviceIdentifier }
212+
},
213+
Operators = new List<Models.MerchantOperatorResponse>
214+
{
215+
new Models.MerchantOperatorResponse
216+
{
217+
OperatorId = TestData.OperatorId,
218+
IsDeleted = true,
219+
MerchantNumber = TestData.MerchantNumber,
220+
Name = "Operator Name",
221+
TerminalNumber = TestData.TerminalNumber
222+
}
223+
}
224+
};
225+
226+
DataTransferObjects.Responses.MerchantResponse dto = modelFactory.ConvertFrom(model);
227+
228+
dto.ShouldNotBeNull();
229+
dto.EstateId.ShouldBe(model.EstateId);
230+
dto.MerchantId.ShouldBe(model.MerchantId);
231+
dto.EstateReportingId.ShouldBe(model.EstateReportingId);
232+
dto.MerchantReportingId.ShouldBe(model.MerchantReportingId);
233+
dto.MerchantName.ShouldBe(model.MerchantName);
234+
dto.MerchantReference.ShouldBe(model.MerchantReference);
235+
dto.NextStatementDate.ShouldBe(model.NextStatementDate);
236+
dto.SettlementSchedule.ShouldBe(DataTransferObjects.Responses.SettlementSchedule.Monthly);
237+
dto.Addresses.Count.ShouldBe(1);
238+
dto.Addresses[0].Town.ShouldBe(TestData.Town);
239+
dto.Contacts.Count.ShouldBe(1);
240+
dto.Contacts[0].ContactEmailAddress.ShouldBe(TestData.ContactEmail);
241+
dto.Contracts.Count.ShouldBe(1);
242+
dto.Contracts[0].ContractProducts.ShouldContain(TestData.ProductId);
243+
dto.Devices[TestData.DeviceId].ShouldBe(TestData.DeviceIdentifier);
244+
dto.Operators.Count.ShouldBe(1);
245+
dto.Operators[0].TerminalNumber.ShouldBe(TestData.TerminalNumber);
246+
}
247+
248+
[Fact]
249+
public void ModelFactory_ConvertFrom_MerchantResponse_NullValue_IsConverted()
250+
{
251+
ModelFactory modelFactory = new ModelFactory();
252+
253+
Models.MerchantResponse model = null;
254+
DataTransferObjects.Responses.MerchantResponse dto = modelFactory.ConvertFrom(model);
255+
256+
dto.ShouldBeNull();
257+
}
159258
}
160259
}

TransactionProcessorACL/Factories/IModelFactory.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public interface IModelFactory
2020

2121
GetVoucherResponseMessage ConvertFrom(GetVoucherResponse model);
2222

23+
DataTransferObjects.Responses.MerchantResponse ConvertFrom(Models.MerchantResponse model);
24+
2325
#endregion
2426
}
25-
}
27+
}

TransactionProcessorACL/Factories/ModelFactory.cs

Lines changed: 92 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
namespace TransactionProcessorACL.Factories
1+
namespace TransactionProcessorACL.Factories
22
{
3+
using System;
4+
using System.Collections.Generic;
35
using DataTransferObjects.Responses;
46
using Models;
57

@@ -90,6 +92,94 @@ public GetVoucherResponseMessage ConvertFrom(GetVoucherResponse model)
9092
return responseMessage;
9193
}
9294

95+
public DataTransferObjects.Responses.MerchantResponse ConvertFrom(Models.MerchantResponse model)
96+
{
97+
if (model == null)
98+
{
99+
return null;
100+
}
101+
102+
DataTransferObjects.Responses.MerchantResponse merchantResponse = new DataTransferObjects.Responses.MerchantResponse
103+
{
104+
EstateId = model.EstateId,
105+
MerchantId = model.MerchantId,
106+
EstateReportingId = model.EstateReportingId,
107+
MerchantName = model.MerchantName,
108+
MerchantReference = model.MerchantReference,
109+
MerchantReportingId = model.MerchantReportingId,
110+
NextStatementDate = model.NextStatementDate,
111+
SettlementSchedule = model.SettlementSchedule switch
112+
{
113+
Models.SettlementSchedule.Weekly => DataTransferObjects.Responses.SettlementSchedule.Weekly,
114+
Models.SettlementSchedule.Monthly => DataTransferObjects.Responses.SettlementSchedule.Monthly,
115+
_ => DataTransferObjects.Responses.SettlementSchedule.NotSet
116+
},
117+
Addresses = new List<DataTransferObjects.Responses.AddressResponse>(),
118+
Contacts = new List<DataTransferObjects.Responses.ContactResponse>(),
119+
Contracts = new List<DataTransferObjects.Responses.MerchantContractResponse>(),
120+
Devices = new Dictionary<Guid, string>(),
121+
Operators = new List<DataTransferObjects.Responses.MerchantOperatorResponse>()
122+
};
123+
124+
foreach (Models.AddressResponse addressModel in model.Addresses)
125+
{
126+
merchantResponse.Addresses.Add(new DataTransferObjects.Responses.AddressResponse
127+
{
128+
AddressId = addressModel.AddressId,
129+
AddressLine1 = addressModel.AddressLine1,
130+
AddressLine2 = addressModel.AddressLine2,
131+
AddressLine3 = addressModel.AddressLine3,
132+
AddressLine4 = addressModel.AddressLine4,
133+
Country = addressModel.Country,
134+
PostalCode = addressModel.PostalCode,
135+
Region = addressModel.Region,
136+
Town = addressModel.Town
137+
});
138+
}
139+
140+
foreach (Models.ContactResponse contactModel in model.Contacts)
141+
{
142+
merchantResponse.Contacts.Add(new DataTransferObjects.Responses.ContactResponse
143+
{
144+
ContactId = contactModel.ContactId,
145+
ContactName = contactModel.ContactName,
146+
ContactPhoneNumber = contactModel.ContactPhoneNumber,
147+
ContactEmailAddress = contactModel.ContactEmailAddress
148+
});
149+
}
150+
151+
foreach (Models.MerchantContractResponse merchantContractResponse in model.Contracts)
152+
{
153+
DataTransferObjects.Responses.MerchantContractResponse contract = new DataTransferObjects.Responses.MerchantContractResponse
154+
{
155+
ContractId = merchantContractResponse.ContractId,
156+
IsDeleted = merchantContractResponse.IsDeleted,
157+
ContractProducts = new List<Guid>(merchantContractResponse.ContractProducts)
158+
};
159+
160+
merchantResponse.Contracts.Add(contract);
161+
}
162+
163+
foreach (KeyValuePair<Guid, string> device in model.Devices)
164+
{
165+
merchantResponse.Devices.Add(device.Key, device.Value);
166+
}
167+
168+
foreach (Models.MerchantOperatorResponse merchantOperatorResponse in model.Operators)
169+
{
170+
merchantResponse.Operators.Add(new DataTransferObjects.Responses.MerchantOperatorResponse
171+
{
172+
OperatorId = merchantOperatorResponse.OperatorId,
173+
IsDeleted = merchantOperatorResponse.IsDeleted,
174+
MerchantNumber = merchantOperatorResponse.MerchantNumber,
175+
Name = merchantOperatorResponse.Name,
176+
TerminalNumber = merchantOperatorResponse.TerminalNumber
177+
});
178+
}
179+
180+
return merchantResponse;
181+
}
182+
93183
public RedeemVoucherResponseMessage ConvertFrom(RedeemVoucherResponse model)
94184
{
95185
if (model == null)
@@ -113,4 +203,4 @@ public RedeemVoucherResponseMessage ConvertFrom(RedeemVoucherResponse model)
113203

114204
#endregion
115205
}
116-
}
206+
}

TransactionProcessorACL/Handlers/MerchantHandlers.cs

Lines changed: 10 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using Shared.Results.Web;
1212
using SimpleResults;
1313
using TransactionProcessorACL.BusinessLogic.Requests;
14+
using TransactionProcessorACL.Factories;
1415
using TransactionProcessorACL.Models;
1516

1617
namespace TransactionProcessorACL.Handlers
@@ -78,7 +79,11 @@ private static DataTransferObjects.Responses.ContractProductTransactionFee MapCo
7879
TransactionFeeReportingId = contractProductTransactionFeeModel.TransactionFeeReportingId
7980
};
8081

81-
public static async Task<IResult> GetMerchant(IMediator mediator, ClaimsPrincipal user, string applicationVersion, CancellationToken cancellationToken)
82+
public static async Task<IResult> GetMerchant(IMediator mediator,
83+
IModelFactory modelFactory,
84+
ClaimsPrincipal user,
85+
string applicationVersion,
86+
CancellationToken cancellationToken)
8287
{
8388
Logger.LogWarning("In GetMerchant Handler");
8489

@@ -89,82 +94,17 @@ public static async Task<IResult> GetMerchant(IMediator mediator, ClaimsPrincipa
8994
MerchantQueries.GetMerchantQuery query = new(claimsResult.Data.estateId, claimsResult.Data.merchantId);
9095
Result<MerchantResponse> result = await mediator.Send(query, cancellationToken);
9196

92-
return ResponseFactory.FromResult(result, response => {
93-
94-
DataTransferObjects.Responses.MerchantResponse merchantResponse = new() {
95-
EstateId = result.Data.EstateId,
96-
MerchantId = result.Data.MerchantId,
97-
EstateReportingId = result.Data.EstateReportingId,
98-
MerchantName = result.Data.MerchantName,
99-
MerchantReference = result.Data.MerchantReference,
100-
MerchantReportingId = result.Data.MerchantReportingId,
101-
NextStatementDate = result.Data.NextStatementDate,
102-
SettlementSchedule = result.Data.SettlementSchedule switch {
103-
SettlementSchedule.Weekly => DataTransferObjects.Responses.SettlementSchedule.Weekly,
104-
SettlementSchedule.Monthly => DataTransferObjects.Responses.SettlementSchedule.Monthly,
105-
_ => DataTransferObjects.Responses.SettlementSchedule.NotSet
106-
},
107-
Addresses = new(),
108-
Contacts = new(),
109-
Contracts = new(),
110-
Devices = new(),
111-
Operators = new()
112-
};
113-
114-
foreach (AddressResponse addressModel in result.Data.Addresses) {
115-
DataTransferObjects.Responses.AddressResponse addressResponse = new() {
116-
AddressId = addressModel.AddressId,
117-
AddressLine1 = addressModel.AddressLine1,
118-
AddressLine2 = addressModel.AddressLine2,
119-
AddressLine3 = addressModel.AddressLine3,
120-
AddressLine4 = addressModel.AddressLine4,
121-
Country = addressModel.Country,
122-
PostalCode = addressModel.PostalCode,
123-
Region = addressModel.Region,
124-
Town = addressModel.Town
125-
};
126-
merchantResponse.Addresses.Add(addressResponse);
127-
}
128-
129-
foreach (ContactResponse contactResponse in result.Data.Contacts) {
130-
merchantResponse.Contacts.Add(new DataTransferObjects.Responses.ContactResponse { ContactId = contactResponse.ContactId, ContactName = contactResponse.ContactName, ContactPhoneNumber = contactResponse.ContactPhoneNumber, ContactEmailAddress = contactResponse.ContactEmailAddress });
131-
}
132-
133-
foreach (MerchantContractResponse merchantContractResponse in result.Data.Contracts) {
134-
DataTransferObjects.Responses.MerchantContractResponse contract = new() { ContractId = merchantContractResponse.ContractId, IsDeleted = merchantContractResponse.IsDeleted, ContractProducts = new() };
135-
foreach (Guid contractProduct in merchantContractResponse.ContractProducts) {
136-
contract.ContractProducts.Add(contractProduct);
137-
}
138-
139-
merchantResponse.Contracts.Add(contract);
140-
}
141-
142-
foreach (KeyValuePair<Guid, string> device in result.Data.Devices) {
143-
merchantResponse.Devices.Add(device.Key, device.Value);
144-
}
145-
146-
foreach (MerchantOperatorResponse merchantOperatorResponse in result.Data.Operators) {
147-
merchantResponse.Operators.Add(new DataTransferObjects.Responses.MerchantOperatorResponse {
148-
OperatorId = merchantOperatorResponse.OperatorId,
149-
IsDeleted = merchantOperatorResponse.IsDeleted,
150-
MerchantNumber = merchantOperatorResponse.MerchantNumber,
151-
Name = merchantOperatorResponse.Name,
152-
TerminalNumber = merchantOperatorResponse.TerminalNumber
153-
});
154-
}
155-
156-
return merchantResponse;
157-
});
97+
return ResponseFactory.FromResult(result, modelFactory.ConvertFrom);
15898
}
15999
}
160100

161-
public class PasswordTokenRequirement : IAuthorizationRequirement { }
101+
public class ClaimsIdentityRequirement : IAuthorizationRequirement { }
162102

163-
public class PasswordTokenHandler : AuthorizationHandler<PasswordTokenRequirement>
103+
public class ClaimsIdentityHandler : AuthorizationHandler<ClaimsIdentityRequirement>
164104
{
165105
protected override Task HandleRequirementAsync(
166106
AuthorizationHandlerContext context,
167-
PasswordTokenRequirement requirement)
107+
ClaimsIdentityRequirement requirement)
168108
{
169109
var hasClaim = context.User.Claims
170110
.Any(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier");

0 commit comments

Comments
 (0)