Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions TransactionProcessorACL.BusinessLogic.Tests/MediatorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public MediatorTests()
this.Requests.Add(TestData.RedeemVoucherCommand);
this.Requests.Add(TestData.GetMerchantContractsQuery);
this.Requests.Add(TestData.GetMerchantQuery);
this.Requests.Add(TestData.GetMerchantScheduleQuery);
}

[Fact]
Expand Down Expand Up @@ -152,5 +153,12 @@ public async Task<Result<MerchantResponse>> GetMerchant(Guid estateId,
CancellationToken cancellationToken) {
return Result.Success(new MerchantResponse());
}

public async Task<Result<MerchantScheduleResponse>> GetMerchantSchedule(Guid estateId,
Guid merchantId,
Int32 year,
CancellationToken cancellationToken) {
return Result.Success(new MerchantScheduleResponse());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ public async Task TransactionProcessorACLApplicationService_ProcessReconciliatio
}

[Fact]
public async Task VoucherManagementACLApplicationService_GetVoucher_VoucherRetrieved()
public async Task TransactionProcessorACLApplicationService_GetVoucher_VoucherRetrieved()
{
this.transactionProcessorClient.Setup(v => v.GetVoucherByCode(It.IsAny<String>(), It.IsAny<Guid>(), It.IsAny<String>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(TestData.GetVoucherResponse);
Expand All @@ -390,7 +390,7 @@ public async Task VoucherManagementACLApplicationService_GetVoucher_VoucherRetri
}

[Fact]
public async Task VoucherManagementACLApplicationService_GetVoucher_GetTokenFailed_ResultIsFailed()
public async Task TransactionProcessorACLApplicationService_GetVoucher_GetTokenFailed_ResultIsFailed()
{
securityServiceClient.Setup(s => s.GetToken(It.IsAny<String>(), It.IsAny<String>(), It.IsAny<CancellationToken>())).ReturnsAsync(Result.Failure());

Expand All @@ -400,7 +400,7 @@ public async Task VoucherManagementACLApplicationService_GetVoucher_GetTokenFail
}

[Fact]
public async Task VoucherManagementACLApplicationService_GetVoucher_GetVoucherFailed_ResultIsFailed()
public async Task TransactionProcessorACLApplicationService_GetVoucher_GetVoucherFailed_ResultIsFailed()
{
this.transactionProcessorClient.Setup(v => v.GetVoucherByCode(It.IsAny<String>(), It.IsAny<Guid>(), It.IsAny<String>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(Result.Failure());
Expand All @@ -412,7 +412,7 @@ public async Task VoucherManagementACLApplicationService_GetVoucher_GetVoucherFa
}

[Fact]
public async Task VoucherManagementACLApplicationService_GetVoucher_ExceptionErrorInGetVoucher_GetVoucherIsNotSuccessful()
public async Task TransactionProcessorACLApplicationService_GetVoucher_ExceptionErrorInGetVoucher_GetVoucherIsNotSuccessful()
{
transactionProcessorClient.Setup(v => v.GetVoucherByCode(It.IsAny<String>(), It.IsAny<Guid>(), It.IsAny<String>(), It.IsAny<CancellationToken>()))
.ThrowsAsync(new Exception("Error"));
Expand All @@ -424,7 +424,7 @@ public async Task VoucherManagementACLApplicationService_GetVoucher_ExceptionErr
}

[Fact]
public async Task VoucherManagementACLApplicationService_RedeemVoucher_VoucherRedeemed()
public async Task TransactionProcessorACLApplicationService_RedeemVoucher_VoucherRedeemed()
{
transactionProcessorClient.Setup(v => v.RedeemVoucher(It.IsAny<String>(), It.IsAny<RedeemVoucherRequest>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(Result.Success);
Expand All @@ -438,7 +438,7 @@ public async Task VoucherManagementACLApplicationService_RedeemVoucher_VoucherRe
}

[Fact]
public async Task VoucherManagementACLApplicationService_RedeemVoucher_GetTokenFailed_ResultIsFailed()
public async Task TransactionProcessorACLApplicationService_RedeemVoucher_GetTokenFailed_ResultIsFailed()
{
transactionProcessorClient.Setup(v => v.RedeemVoucher(It.IsAny<String>(), It.IsAny<RedeemVoucherRequest>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(Result.Failure);
Expand All @@ -450,7 +450,7 @@ public async Task VoucherManagementACLApplicationService_RedeemVoucher_GetTokenF
}

[Fact]
public async Task VoucherManagementACLApplicationService_RedeemVoucher_RedeemVoucherFailed_ResultIsFailed()
public async Task TransactionProcessorACLApplicationService_RedeemVoucher_RedeemVoucherFailed_ResultIsFailed()
{
transactionProcessorClient.Setup(v => v.RedeemVoucher(It.IsAny<String>(), It.IsAny<RedeemVoucherRequest>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(Result.Failure());
Expand All @@ -462,7 +462,7 @@ public async Task VoucherManagementACLApplicationService_RedeemVoucher_RedeemVou
}

[Fact]
public async Task VoucherManagementACLApplicationService_RedeemVoucher_ExceptionErrorInGetVoucher_GetVoucherIsNotSuccessful()
public async Task TransactionProcessorACLApplicationService_RedeemVoucher_ExceptionErrorInGetVoucher_GetVoucherIsNotSuccessful()
{
transactionProcessorClient.Setup(v => v.RedeemVoucher(It.IsAny<String>(), It.IsAny<RedeemVoucherRequest>(), It.IsAny<CancellationToken>()))
.ThrowsAsync(new Exception("Error"));
Expand All @@ -478,7 +478,7 @@ public async Task VoucherManagementACLApplicationService_RedeemVoucher_Exception
[InlineData(TransactionProcessor.DataTransferObjects.Responses.Merchant.SettlementSchedule.Immediate)]
[InlineData(TransactionProcessor.DataTransferObjects.Responses.Merchant.SettlementSchedule.Weekly)]
[InlineData(TransactionProcessor.DataTransferObjects.Responses.Merchant.SettlementSchedule.Monthly)]
public async Task VoucherManagementACLApplicationService_GetMerchant_MerchantReturned(TransactionProcessor.DataTransferObjects.Responses.Merchant.SettlementSchedule settlementSchedule)
public async Task TransactionProcessorACLApplicationService_GetMerchant_MerchantReturned(TransactionProcessor.DataTransferObjects.Responses.Merchant.SettlementSchedule settlementSchedule)
{
transactionProcessorClient.Setup(v => v.GetMerchant(It.IsAny<String>(), It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(Result.Success(TestData.MerchantResponse(settlementSchedule)));
Expand All @@ -504,7 +504,7 @@ public async Task VoucherManagementACLApplicationService_GetMerchant_MerchantRet
}

[Fact]
public async Task VoucherManagementACLApplicationService_GetMerchant_GetTokenFailed_ResultIsFailed()
public async Task TransactionProcessorACLApplicationService_GetMerchant_GetTokenFailed_ResultIsFailed()
{
securityServiceClient.Setup(s => s.GetToken(It.IsAny<String>(), It.IsAny<String>(), It.IsAny<CancellationToken>())).ReturnsAsync(Result.Failure());

Expand All @@ -514,7 +514,7 @@ public async Task VoucherManagementACLApplicationService_GetMerchant_GetTokenFai
}

[Fact]
public async Task VoucherManagementACLApplicationService_GetMerchant_GetMerchantFailed_ResultIsFailed()
public async Task TransactionProcessorACLApplicationService_GetMerchant_GetMerchantFailed_ResultIsFailed()
{
transactionProcessorClient.Setup(v => v.GetMerchant(It.IsAny<String>(), It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(Result.Failure());
Expand All @@ -528,7 +528,7 @@ public async Task VoucherManagementACLApplicationService_GetMerchant_GetMerchant
[InlineData(TransactionProcessor.DataTransferObjects.Responses.Contract.ProductType.Voucher)]
[InlineData(TransactionProcessor.DataTransferObjects.Responses.Contract.ProductType.BillPayment)]
[InlineData(TransactionProcessor.DataTransferObjects.Responses.Contract.ProductType.MobileTopup)]
public async Task VoucherManagementACLApplicationService_GetMerchantContracts_MerchantContractsReturned(TransactionProcessor.DataTransferObjects.Responses.Contract.ProductType productType) {
public async Task TransactionProcessorACLApplicationService_GetMerchantContracts_MerchantContractsReturned(TransactionProcessor.DataTransferObjects.Responses.Contract.ProductType productType) {
transactionProcessorClient.Setup(v => v.GetMerchantContracts(It.IsAny<String>(), It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(Result.Success(TestData.MerchantContractResponses(productType)));
securityServiceClient.Setup(s => s.GetToken(It.IsAny<String>(), It.IsAny<String>(), It.IsAny<CancellationToken>())).ReturnsAsync(Result.Success(TestData.TokenResponse));
Expand All @@ -538,7 +538,7 @@ public async Task VoucherManagementACLApplicationService_GetMerchantContracts_Me
}

[Fact]
public async Task VoucherManagementACLApplicationService_GetMerchantContracts_GetTokenFailed_ResultIsFailed()
public async Task TransactionProcessorACLApplicationService_GetMerchantContracts_GetTokenFailed_ResultIsFailed()
{
securityServiceClient.Setup(s => s.GetToken(It.IsAny<String>(), It.IsAny<String>(), It.IsAny<CancellationToken>())).ReturnsAsync(Result.Failure());

Expand All @@ -547,7 +547,7 @@ public async Task VoucherManagementACLApplicationService_GetMerchantContracts_Ge
}

[Fact]
public async Task VoucherManagementACLApplicationService_GetMerchantContracts_GetMerchantContractsFailed_ResultIsFailed()
public async Task TransactionProcessorACLApplicationService_GetMerchantContracts_GetMerchantContractsFailed_ResultIsFailed()
{
transactionProcessorClient.Setup(v => v.GetMerchantContracts(It.IsAny<String>(), It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(Result.Failure());
Expand All @@ -556,5 +556,36 @@ public async Task VoucherManagementACLApplicationService_GetMerchantContracts_Ge
var merchantContractsResponse = await applicationService.GetMerchantContracts(TestData.EstateId, TestData.MerchantId, CancellationToken.None);
merchantContractsResponse.IsFailed.ShouldBeTrue();
}

[Fact]
public async Task TransactionProcessorACLApplicationService_GetMerchantSchedule_MerchantScheduleReturned()
{
transactionProcessorClient.Setup(v => v.GetMerchantSchedule(It.IsAny<String>(), It.IsAny<Guid>(), It.IsAny<Guid>(),It.IsAny<Int32>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(Result.Success(TestData.MerchantScheduleResponse()));
securityServiceClient.Setup(s => s.GetToken(It.IsAny<String>(), It.IsAny<String>(), It.IsAny<CancellationToken>())).ReturnsAsync(Result.Success(TestData.TokenResponse));

var merchantScheduleResponse = await applicationService.GetMerchantSchedule(TestData.EstateId, TestData.MerchantId, TestData.ScheduleYear, CancellationToken.None);
merchantScheduleResponse.IsSuccess.ShouldBeTrue();
}

[Fact]
public async Task TransactionProcessorACLApplicationService_GetMerchantSchedule_GetTokenFailed_ResultIsFailed()
{
securityServiceClient.Setup(s => s.GetToken(It.IsAny<String>(), It.IsAny<String>(), It.IsAny<CancellationToken>())).ReturnsAsync(Result.Failure());

var merchantScheduleResponse = await applicationService.GetMerchantSchedule(TestData.EstateId, TestData.MerchantId, TestData.ScheduleYear, CancellationToken.None);
merchantScheduleResponse.IsFailed.ShouldBeTrue();
}

[Fact]
public async Task TransactionProcessorACLApplicationService_GetMerchantSchedule_GetMerchantScheduleFailed_ResultIsFailed()
{
transactionProcessorClient.Setup(v => v.GetMerchantSchedule(It.IsAny<String>(), It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<Int32>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(Result.Failure());
securityServiceClient.Setup(s => s.GetToken(It.IsAny<String>(), It.IsAny<String>(), It.IsAny<CancellationToken>())).ReturnsAsync(Result.Success(TestData.TokenResponse));

var merchantScheduleResponse = await applicationService.GetMerchantSchedule(TestData.EstateId, TestData.MerchantId, TestData.ScheduleYear, CancellationToken.None);
merchantScheduleResponse.IsFailed.ShouldBeTrue();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,11 @@
namespace TransactionProcessorACL.BusinessLogic.RequestHandlers;

public class MerchantRequestHandler : IRequestHandler<MerchantQueries.GetMerchantContractsQuery, Result<List<ContractResponse>>>,
IRequestHandler<MerchantQueries.GetMerchantQuery, Result<MerchantResponse>> {
#region Fields

IRequestHandler<MerchantQueries.GetMerchantQuery, Result<MerchantResponse>>,
IRequestHandler<MerchantQueries.GetMerchantScheduleQuery, Result<MerchantScheduleResponse>> {
private readonly ITransactionProcessorACLApplicationService ApplicationService;

#endregion


public MerchantRequestHandler(ITransactionProcessorACLApplicationService applicationService) {
this.ApplicationService = applicationService;
}
Expand All @@ -30,4 +28,9 @@ public async Task<Result<MerchantResponse>> Handle(MerchantQueries.GetMerchantQu
CancellationToken cancellationToken) {
return await this.ApplicationService.GetMerchant(request.EstateId, request.MerchantId, cancellationToken);
}

public async Task<Result<MerchantScheduleResponse>> Handle(MerchantQueries.GetMerchantScheduleQuery request,
CancellationToken cancellationToken) {
return await this.ApplicationService.GetMerchantSchedule(request.EstateId, request.MerchantId, request.Year, cancellationToken);
}
}
16 changes: 16 additions & 0 deletions TransactionProcessorACL.BusinessLogic/Requests/MerchantQueries.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using MediatR;
using SimpleResults;
using TransactionProcessorACL.Models;

namespace TransactionProcessorACL.BusinessLogic.Requests;

[ExcludeFromCodeCoverage]
public record MerchantQueries {
public record GetMerchantContractsQuery(Guid EstateId,Guid MerchantId) : IRequest<Result<List<ContractResponse>>>;
public record GetMerchantQuery(Guid EstateId, Guid MerchantId) : IRequest<Result<MerchantResponse>>;
public record GetMerchantScheduleQuery(Guid EstateId, Guid MerchantId, Int32 Year) : IRequest<Result<MerchantScheduleResponse>>;

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
using SimpleResults;
using TransactionProcessor.DataTransferObjects.Responses.Merchant;
using TransactionProcessorACL.Models;
using MerchantResponse = TransactionProcessorACL.Models.MerchantResponse;

namespace TransactionProcessorACL.BusinessLogic.Requests;

Expand Down Expand Up @@ -37,11 +36,4 @@ public record ProcessReconciliationCommand(Guid EstateId,
Int32 TransactionCount,
Decimal TransactionValue)
: IRequest<Result<ProcessReconciliationResponse>>;
}

[ExcludeFromCodeCoverage]
public record MerchantQueries {
public record GetMerchantContractsQuery(Guid EstateId,Guid MerchantId) : IRequest<Result<List<ContractResponse>>>;
public record GetMerchantQuery(Guid EstateId, Guid MerchantId) : IRequest<Result<MerchantResponse>>;

}
Original file line number Diff line number Diff line change
Expand Up @@ -55,5 +55,10 @@ Task<Result<RedeemVoucherResponse>> RedeemVoucher(Guid estateId,
Task<Result<Models.MerchantResponse>> GetMerchant(Guid estateId,
Guid merchantId,
CancellationToken cancellationToken);

Task<Result<MerchantScheduleResponse>> GetMerchantSchedule(Guid estateId,
Guid merchantId,
Int32 year,
CancellationToken cancellationToken);
}
}
19 changes: 19 additions & 0 deletions TransactionProcessorACL.BusinessLogic/Services/ResponseFactory.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using TransactionProcessor.DataTransferObjects.Requests.Merchant;
using TransactionProcessorACL.Models;
using ContractContactResponse = TransactionProcessor.DataTransferObjects.Responses.Contract.ContactResponse;
Expand Down Expand Up @@ -138,5 +139,23 @@ private static void PopulateMerchantOperators(List<TransactionProcessor.DataTran
});
}
}

public static MerchantScheduleResponse Build(TransactionProcessor.DataTransferObjects.Responses.Merchant.MerchantScheduleResponse resultData) {
if (resultData == null) {
return null;
}

var response = new MerchantScheduleResponse
{
Year = resultData.Year,
Months = resultData.Months.Select(m => new MerchantScheduleMonthResponse
{
Month = m.Month,
ClosedDays = m.ClosedDays
}).ToList() ?? new List<MerchantScheduleMonthResponse>()
};

return response;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,29 @@ public async Task<Result<MerchantResponse>> GetMerchant(Guid estateId,

MerchantResponse merchantResponse = ResponseFactory.Build(result.Data);

return merchantResponse;
return Result.Success(merchantResponse);
}

public async Task<Result<MerchantScheduleResponse>> GetMerchantSchedule(Guid estateId,
Guid merchantId,
Int32 year,
CancellationToken cancellationToken) {
Result<TokenResponse> accessTokenResult = await this.GetAccessToken(cancellationToken);
if (accessTokenResult.IsFailed)
{
return ResultHelpers.CreateFailure(accessTokenResult);
}

TokenResponse accessToken = accessTokenResult.Data;

Result<TransactionProcessor.DataTransferObjects.Responses.Merchant.MerchantScheduleResponse> result = await this.TransactionProcessorClient.GetMerchantSchedule(accessToken.AccessToken, estateId, merchantId, year, cancellationToken);

if (result.IsFailed)
return Result.Failure($"Error getting merchant schedule {result.Message}");

MerchantScheduleResponse merchantScheduleResponse = ResponseFactory.Build(result.Data);

return Result.Success(merchantScheduleResponse);
}

private static ProcessReconciliationResponse CreateProcessReconciliationResponse(ReconciliationResponse reconciliationResponse)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
namespace TransactionProcessorACL.DataTransferObjects.Responses{

using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;

[ExcludeFromCodeCoverage]
Expand All @@ -23,4 +24,20 @@ public class RedeemVoucherResponseMessage{

#endregion
}

[ExcludeFromCodeCoverage]
public class MerchantScheduleResponse
{
public int Year { get; set; }

public List<MerchantScheduleMonthResponse> Months { get; set; } = new List<MerchantScheduleMonthResponse>();
}

[ExcludeFromCodeCoverage]
public class MerchantScheduleMonthResponse
{
public int Month { get; set; }

public List<int> ClosedDays { get; set; } = new List<int>();
}
}
Loading
Loading