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
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,38 @@ public async Task AgencyBankingProxy_ProcessSaleMessage_BalanceEnquiryFailure_Re
capturedRequest.RequestUri.ShouldBe(new Uri("http://localhost/transactions/balance-enquiry"));
}

[Fact]
public async Task AgencyBankingProxy_ProcessSaleMessage_BalanceEnquiryTimeout_ReturnsFailureResult()
{
Mock<HttpMessageHandler> handlerMock = new Mock<HttpMessageHandler>(MockBehavior.Strict);
handlerMock.Protected()
.Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
.ThrowsAsync(new TimeoutException("Execution Timeout Expired"));

HttpClient httpClient = new HttpClient(handlerMock.Object);
AgencyBankingConfiguration configuration = CreateConfiguration();
IOperatorProxy proxy = new AgencyBankingProxy(httpClient, configuration);

Dictionary<String, String> metadata = new Dictionary<String, String>
{
{ "AgencyBankingMessageType", "balanceenquiry" },
{ "AgencyBankingAccountNumber", "123456789" }
};

var result = await proxy.ProcessSaleMessage(TestData.TransactionId,
TestData.OperatorId,
TestData.Merchant,
TestData.TransactionDateTime,
TestData.TransactionReference,
metadata,
CancellationToken.None);

result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Failure);
result.Message.ShouldContain("AgencyBanking request failed");
result.Message.ShouldContain("Execution Timeout Expired");
}

[Fact]
public async Task AgencyBankingProxy_ProcessSaleMessage_BalanceEnquirySuccess_ReturnsMappedOperatorResponse()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,49 @@ public async Task PataPawaPostPayProxy_ProcessSaleMessage_VerifyAccount_RequestF
result.Status.ShouldBe(ResultStatus.NotFound);
result.Message.Contains($"Error verifying account number {TestData.PataPawaPostPaidAccountNumber}");
}

[Fact]
public async Task PataPawaPostPayProxy_ProcessSaleMessage_VerifyAccount_Timeout_ErrorIsThrown()
{
this.PataPawaPostPayService.Setup(s => s.getVerifyRequestAsync(It.IsAny<String>(), It.IsAny<String>(), It.IsAny<String>()))
.ThrowsAsync(new TimeoutException("Execution Timeout Expired"));
MemoryCache.Set("PataPawaPostPayLogon", TestData.PataPawaPostPaidSuccessfulLoginOperatorResponse);

var result = await this.PataPawaPostPayProxy.ProcessSaleMessage(TestData.TransactionId,
TestData.OperatorId,
TestData.Merchant,
TestData.TransactionDateTime,
TestData.TransactionReference,
TestData.AdditionalTransactionMetaDataForPataPawaVerifyAccount(customerAccountNumber: TestData.PataPawaPostPaidAccountNumber),
CancellationToken.None);

result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Failure);
result.Message.ShouldContain($"Error verifying account number {TestData.PataPawaPostPaidAccountNumber}");
result.Message.ShouldContain("Execution Timeout Expired");
}

[Fact]
public async Task PataPawaPostPayProxy_ProcessSaleMessage_ProcessBill_Timeout_ErrorIsThrown()
{
this.PataPawaPostPayService.Setup(s => s.getPayBillRequestAsync(It.IsAny<String>(), It.IsAny<String>(), It.IsAny<String>(),
It.IsAny<String>(), It.IsAny<String>(), It.IsAny<Decimal>()))
.ThrowsAsync(new TimeoutException("Execution Timeout Expired"));
MemoryCache.Set("PataPawaPostPayLogon", TestData.PataPawaPostPaidSuccessfulLoginOperatorResponse);

var result = await this.PataPawaPostPayProxy.ProcessSaleMessage(TestData.TransactionId,
TestData.OperatorId,
TestData.Merchant,
TestData.TransactionDateTime,
TestData.TransactionReference,
TestData.AdditionalTransactionMetaDataForPataPawaProcessBill(customerAccountNumber: TestData.PataPawaPostPaidAccountNumber),
CancellationToken.None);

result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Failure);
result.Message.ShouldContain($"Error paying bill for account number {TestData.PataPawaPostPaidAccountNumber}");
result.Message.ShouldContain("Execution Timeout Expired");
}

[Fact]
public async Task PataPawaPostPayProxy_ProcessSaleMessage_ProcessBill_SuccessfulResponse_MessageIsProcessed()
Expand Down Expand Up @@ -383,4 +426,4 @@ public async Task PataPawaPostPayProxy_ProcessSaleMessage_ProcessBill_RequestFai
result.Message.Contains($"Error paying bill for account number {TestData.PataPawaPostPaidAccountNumber}");
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,36 @@ public async Task PataPawaPrePayProxy_ProcessSaleMessage_MeterTransaction_Failed
result.IsFailed.ShouldBeTrue();
}

[Fact]
public async Task PataPawaPrePayProxy_ProcessSaleMessage_MeterTransaction_Timeout_MessageProcessed()
{
BusinessLogic.OperatorInterfaces.OperatorResponse operatorResponse = new()
{
TransactionId = Guid.Parse("2D9D6BBA-BDF4-4248-9B27-6B68374AC037").ToString(),
AdditionalTransactionResponseMetadata = new Dictionary<String, String>{
{"PataPawaPrePaidAPIKey", "APIKey"}
}
};

this.MemoryCache.Set("PataPawaPrePayLogon", operatorResponse, new MemoryCacheEntryOptions());

Dictionary<String, String> metaDataDictionary = new Dictionary<String, String>();
metaDataDictionary.Add("PataPawaPrePayMessageType", "meter");
metaDataDictionary.Add("MeterNumber", "123456");

this.MockHttpMessageHandler.When("http://localhost")
.Respond(req => throw new TimeoutException("Execution Timeout Expired"));

var result = await this.PataPawaPrePayProxy.ProcessSaleMessage(TestData.TransactionId,
TestData.OperatorId, TestData.Merchant, TestData.TransactionDateTime, TestData.TransactionReference,
metaDataDictionary, CancellationToken.None);

result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Failure);
result.Message.ShouldContain("Error performing meter transaction for meter number 123456");
result.Message.ShouldContain("Execution Timeout Expired");
}

[Fact]
public async Task PataPawaPrePayProxy_ProcessSaleMessage_VendTransaction_MessageProcessed()
{
Expand Down Expand Up @@ -216,6 +246,38 @@ public async Task PataPawaPrePayProxy_ProcessSaleMessage_VendTransaction_FailedA
result.IsFailed.ShouldBeTrue();
}

[Fact]
public async Task PataPawaPrePayProxy_ProcessSaleMessage_VendTransaction_Timeout_MessageProcessed()
{
BusinessLogic.OperatorInterfaces.OperatorResponse operatorResponse = new()
{
TransactionId = Guid.Parse("2D9D6BBA-BDF4-4248-9B27-6B68374AC037").ToString(),
AdditionalTransactionResponseMetadata = new Dictionary<String, String>{
{"PataPawaPrePaidAPIKey", "APIKey"}
}
};

this.MemoryCache.Set("PataPawaPrePayLogon", operatorResponse, new MemoryCacheEntryOptions());

Dictionary<String, String> metaDataDictionary = new Dictionary<String, String>();
metaDataDictionary.Add("PataPawaPrePayMessageType", "vend");
metaDataDictionary.Add("MeterNumber", "123456");
metaDataDictionary.Add("CustomerName", "Mr Customer");
metaDataDictionary.Add("Amount", "100");

this.MockHttpMessageHandler.When("http://localhost")
.Respond(req => throw new TimeoutException("Execution Timeout Expired"));

var result = await this.PataPawaPrePayProxy.ProcessSaleMessage(TestData.TransactionId,
TestData.OperatorId, TestData.Merchant, TestData.TransactionDateTime, TestData.TransactionReference,
metaDataDictionary, CancellationToken.None);

result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Failure);
result.Message.ShouldContain("Error performing vend transaction for meter number 123456");
result.Message.ShouldContain("Execution Timeout Expired");
}

[Theory]
[InlineData(null)]
[InlineData("")]
Expand Down Expand Up @@ -457,4 +519,4 @@ public async Task PataPawaPrePayProxy_ProcessSaleMessage_MeterNumberNullOrEmpty_
result.Status.ShouldBe(ResultStatus.Invalid);
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,33 @@ public async Task SafaricomPinlessProxy_ProcessSaleMessage_FailedToSend_ErrorThr
result.Status.ShouldBe(ResultStatus.Failure);
}

[Fact]
public async Task SafaricomPinlessProxy_ProcessSaleMessage_Timeout_ErrorThrown()
{
Mock<HttpMessageHandler> handlerMock = new Mock<HttpMessageHandler>(MockBehavior.Strict);
handlerMock.Protected()
.Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
.ThrowsAsync(new TimeoutException("Execution Timeout Expired"));

SafaricomConfiguration safaricomConfiguration = TestData.SafaricomConfiguration;
HttpClient httpClient = new HttpClient(handlerMock.Object);

IOperatorProxy safaricomPinlessproxy = new SafaricomPinlessProxy(safaricomConfiguration, httpClient);

var result = await safaricomPinlessproxy.ProcessSaleMessage(TestData.TransactionId,
TestData.OperatorId,
TestData.Merchant,
TestData.TransactionDateTime,
TestData.TransactionReference,
TestData.AdditionalTransactionMetaDataForMobileTopup(),
CancellationToken.None);

result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Failure);
result.Message.ShouldContain("Error sending request to Safaricom");
result.Message.ShouldContain("Execution Timeout Expired");
}

[Theory]
[InlineData("", "123456789")]
[InlineData(null, "123456789")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,28 @@ public async Task VoucherManagementProxy_ProcessSaleMessage_VoucherIssueFailed_F
result.IsFailed.ShouldBeTrue();
}

[Fact]
public async Task VoucherManagementProxy_ProcessSaleMessage_VoucherIssueThrowsTimeout_FailedResultReturned()
{
Mock<IMediator> mediator = new Mock<IMediator>();
mediator.Setup(m => m.Send(It.IsAny<VoucherCommands.IssueVoucherCommand>(), It.IsAny<CancellationToken>()))
.ThrowsAsync(new TimeoutException("Execution Timeout Expired"));
IOperatorProxy voucherManagementProxy = new VoucherManagementProxy(mediator.Object);

var result = await voucherManagementProxy.ProcessSaleMessage(TestData.TransactionId,
TestData.OperatorId,
TestData.Merchant,
TestData.TransactionDateTime,
TestData.TransactionReference,
TestData.AdditionalTransactionMetaDataForVoucher(),
CancellationToken.None);

result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Failure);
result.Message.ShouldContain("Error issuing voucher");
result.Message.ShouldContain("Execution Timeout Expired");
}

[Theory]
[InlineData("")]
[InlineData(null)]
Expand Down Expand Up @@ -134,4 +156,4 @@ public async Task VoucherManagementProxy_ProcessSaleMessage_InvalidData_Recipien
result.Status.ShouldBe(ResultStatus.Invalid);
}
}
}
}
Loading
Loading