//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
     });
 }
Exemple #3
0
        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);
        }