//TODO: Probably a better way to do this, should investigate a different approach. This would not be pleasant to update when new statuses are added, and doesn't really belong in this class. private PaymentStatuses MapStatusFromString(AcquiringBankResponse response) { if (response.PaymentStatus == null) { _logger.LogWarning($"Null status response from aqcuiring bank"); return(PaymentStatuses.SubmissionError); } if (response.PaymentStatus.Equals("ValidationError", StringComparison.InvariantCultureIgnoreCase)) { return(PaymentStatuses.BankValidationError); } if (response.PaymentStatus.Equals("SubmissionError", StringComparison.InvariantCultureIgnoreCase)) { return(PaymentStatuses.SubmissionError); } if (response.PaymentStatus.Equals("Submitted", StringComparison.InvariantCultureIgnoreCase)) { return(PaymentStatuses.Submitted); } _logger.LogWarning($"Unmapped status : {response.PaymentStatus} from acquiring bank"); return(PaymentStatuses.SubmissionError); }
private AcquiringBankPaymentDetails GenerateDetails(AcquiringBankResponse response) { return(new AcquiringBankPaymentDetails { BankId = response.BankId, PaymentStatus = MapStatusFromString(response), StatusDateTime = response.StatusDateTime }); }
public async Task SubmitPaymentToBank_ValidPaymentRequest_ReturnsCorrectDetails() { // Arrange var expectedBankId = new Guid("7b6bf96c-0231-41e3-9014-393ff87ed4e1"); PaymentRequest paymentRequest = new PaymentRequest { Amount = 100, CardholderName = "Testy McTester", CardNumber = "1111 2222 3333 4444", CurrencyIsoAlpha3 = "GBP", Cvv = "123", MerchantId = new Guid("aa9f4ef9-35ab-4a10-8cf5-f5535582fd01") }; var submissionDateTimeMock = new DateTimeOffset(2020, 01, 01, 0, 0, 0, new TimeSpan(0, 0, 0)); AcquiringBankResponse responseMock = new AcquiringBankResponse { BankId = expectedBankId, PaymentStatus = "Submitted", StatusDateTime = submissionDateTimeMock }; var data = JsonSerializer.Serialize(responseMock); var contentMock = new StringContent(data.ToString(), Encoding.UTF8, "application/json"); _httpMessageHandlerMock.Protected() .Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .ReturnsAsync(new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = contentMock }); var client = new HttpClient(_httpMessageHandlerMock.Object); var sut = new AcquiringBankClient(_acquiringBankSettingsMock.Object, client, _loggerMock.Object); // Act var result = await sut.SubmitPaymentToBank(paymentRequest); // Assert Assert.AreEqual(expectedBankId, result.BankId); Assert.AreEqual(PaymentStatuses.Submitted, result.PaymentStatus); Assert.AreEqual(submissionDateTimeMock, result.StatusDateTime); }