Example #1
0
        public RetrievePaymentsResponse MapBankApiGetResponseToDomainResponse(BankRetrievePaymentsResponseDto bankResponseDto)
        {
            if (bankResponseDto == null || bankResponseDto.Payments == null)
            {
                this._logger.LogError(Resources.Logging_DtoMapperNullInput,
                                      bankResponseDto == null ? (typeof(BankRetrievePaymentsResponseDto).Name) : (typeof(BankRetrievedPaymentDetails).Name));

                throw new HttpException(HttpStatusCode.InternalServerError,
                                        Resources.ErrorCode_MappingError_BankApiToPaymentApi,
                                        Resources.ErrorMessage_MappingError_BankApiToPaymentApi);
            }

            var retrievePaymentResponse = new RetrievePaymentsResponse()
            {
                Payments = bankResponseDto.Payments.Select(payment => new RetrievedPaymentDetails()
                {
                    PaymentStatus   = payment.PaymentStatus,
                    PaymentDateTime = payment.PaymentDateTime,
                    PaymentAmount   = payment.PaymentAmount,
                    Currency        = payment.Currency,
                    CardNumber      = this.MaskString(payment.CardNumber, 4),
                    CardHolder      = payment.CardHolder,
                    CardType        = payment.CardType,
                    ExpirationMonth = payment.ExpirationMonth,
                    ExpirationYear  = payment.ExpirationYear
                }).ToList()
            };

            return(retrievePaymentResponse);
        }
Example #2
0
        public async Task RetrievePaymentReturnsResponseWhenBankingApiRespondsSuccessfully()
        {
            //Arrange
            var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK);
            var data = new BankRetrievePaymentsResponseDto()
            {
                Payments = new List <BankRetrievedPaymentDetails>()
                {
                    new BankRetrievedPaymentDetails()
                    {
                        PaymentStatus   = PaymentStatus.Success,
                        PaymentDateTime = new DateTime(2020, 12, 01, 12, 0, 0),
                        PaymentAmount   = 100.00M,
                        Currency        = SupportedCurrencies.GBP,
                        CardNumber      = "5500000000000004",
                        CardHolder      = "Test Account",
                        CardType        = CardType.MasterCard,
                        ExpirationMonth = "12",
                        ExpirationYear  = "21"
                    }
                }
            };

            httpResponseMessage.Content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");

            this._handler.Protected()
            .Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>())
            .ReturnsAsync(httpResponseMessage);

            var bankDto = new BankRetrievePaymentsRequestDto()
            {
                TransactionId = new Guid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")
            };

            //Act
            var result = await this._bankingService.RetrievePayments(bankDto);

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOf <BankRetrievePaymentsResponseDto>(result);
            Assert.IsNotNull(result.Payments);
            Assert.IsInstanceOf <List <BankRetrievedPaymentDetails> >(result.Payments);
            Assert.AreEqual(1, result.Payments.Count);

            var payment = result.Payments[0];

            Assert.AreEqual(PaymentStatus.Success, payment.PaymentStatus);
            Assert.AreEqual(new DateTime(2020, 12, 01, 12, 0, 0), payment.PaymentDateTime);
            Assert.AreEqual(100.00M, payment.PaymentAmount);
            Assert.AreEqual(SupportedCurrencies.GBP, payment.Currency);
            Assert.AreEqual("5500000000000004", payment.CardNumber);
            Assert.AreEqual("Test Account", payment.CardHolder);
            Assert.AreEqual(CardType.MasterCard, payment.CardType);
            Assert.AreEqual("12", payment.ExpirationMonth);
            Assert.AreEqual("21", payment.ExpirationYear);
        }
        public void SuccessfullyMapsBankingApiResponseDtoToRetrievePaymentApiResponse()
        {
            //Arrange
            var bankingApiResponseDto = new BankRetrievePaymentsResponseDto()
            {
                Payments = new List <BankRetrievedPaymentDetails>()
                {
                    new BankRetrievedPaymentDetails()
                    {
                        PaymentStatus   = PaymentStatus.Success,
                        PaymentDateTime = new DateTime(2020, 12, 01, 12, 0, 0),
                        PaymentAmount   = 100.00M,
                        Currency        = SupportedCurrencies.GBP,
                        CardNumber      = "5500000000000004",
                        CardHolder      = "Test Account",
                        CardType        = CardType.MasterCard,
                        ExpirationMonth = "12",
                        ExpirationYear  = "21"
                    }
                }
            };

            //Act
            var result = this._mapper.MapBankApiGetResponseToDomainResponse(bankingApiResponseDto);

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOf <RetrievePaymentsResponse>(result);
            Assert.IsNotNull(result.Payments);
            Assert.IsInstanceOf <List <RetrievedPaymentDetails> >(result.Payments);
            Assert.AreEqual(1, result.Payments.Count);

            var payment = result.Payments[0];

            Assert.AreEqual(PaymentStatus.Success, payment.PaymentStatus);
            Assert.AreEqual(new DateTime(2020, 12, 01, 12, 0, 0), payment.PaymentDateTime);
            Assert.AreEqual(100.00M, payment.PaymentAmount);
            Assert.AreEqual(SupportedCurrencies.GBP, payment.Currency);
            Assert.AreEqual("XXXXXXXXXXXX0004", payment.CardNumber);
            Assert.AreEqual("Test Account", payment.CardHolder);
            Assert.AreEqual(CardType.MasterCard, payment.CardType);
            Assert.AreEqual("12", payment.ExpirationMonth);
            Assert.AreEqual("21", payment.ExpirationYear);
        }
        public void MappingBankingApiResponseDtoToRetrievePaymentResponseThrowsErrorIfDtoPaymentsCollectionIsNull()
        {
            //Arrange
            var bankingApiResponseDto = new BankRetrievePaymentsResponseDto()
            {
                Payments = null
            };

            //Act - see assertion.

            //Assert
            var ex = Assert.Throws <HttpException>(() => this._mapper.MapBankApiGetResponseToDomainResponse(bankingApiResponseDto));

            Assert.AreEqual(HttpStatusCode.InternalServerError, ex.StatusCode);
            Assert.AreEqual(Resources.ErrorMessage_MappingError_BankApiToPaymentApi, ex.Message);
            Assert.AreEqual(Resources.ErrorCode_MappingError_BankApiToPaymentApi, ex.ErrorCode);

            //Verify logging took place
            this._logger.Verify(x => x.Log(LogLevel.Error,
                                           It.IsAny <EventId>(),
                                           It.IsAny <It.IsAnyType>(),
                                           It.IsAny <Exception>(),
                                           (Func <It.IsAnyType, Exception, string>)It.IsAny <object>()), Times.Once);
        }
        public async Task RetrievePaymentReturnsRetrievePaymentResponse()
        {
            //Arrange
            var model = new RetrievePaymentsRequestDto()
            {
                TransactionId = new Guid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")
            };

            var bankingRequestDto = new BankRetrievePaymentsRequestDto()
            {
                TransactionId = new Guid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")
            };

            var bankingResponseDto = new BankRetrievePaymentsResponseDto()
            {
                Payments = new List <BankRetrievedPaymentDetails>()
                {
                    new BankRetrievedPaymentDetails()
                    {
                        PaymentStatus   = PaymentStatus.Success,
                        PaymentDateTime = new DateTime(2020, 12, 01, 12, 0, 0),
                        PaymentAmount   = 100.00M,
                        Currency        = SupportedCurrencies.GBP,
                        CardNumber      = "5500000000000004",
                        CardHolder      = "Test Account",
                        CardType        = CardType.MasterCard,
                        ExpirationMonth = "12",
                        ExpirationYear  = "21"
                    }
                }
            };

            var retrievePaymentsResponse = new RetrievePaymentsResponse()
            {
                Payments = new List <RetrievedPaymentDetails>()
                {
                    new RetrievedPaymentDetails()
                    {
                        PaymentStatus   = PaymentStatus.Success,
                        PaymentDateTime = new DateTime(2020, 12, 01, 12, 0, 0),
                        PaymentAmount   = 100.00M,
                        Currency        = SupportedCurrencies.GBP,
                        CardNumber      = "XXXXXXXXXXXX0004",
                        CardHolder      = "Test Account",
                        CardType        = CardType.MasterCard,
                        ExpirationMonth = "12",
                        ExpirationYear  = "21"
                    }
                }
            };

            this._dtoMapper.Setup(x => x.MapRetrievePaymentsRequestModelToBankDto(It.IsAny <RetrievePaymentsRequestDto>())).Returns(bankingRequestDto);
            this._bankingService.Setup(x => x.RetrievePayments(It.IsAny <BankRetrievePaymentsRequestDto>())).ReturnsAsync(bankingResponseDto);
            this._dtoMapper.Setup(x => x.MapBankApiGetResponseToDomainResponse(It.IsAny <BankRetrievePaymentsResponseDto>())).Returns(retrievePaymentsResponse);

            //Act
            var result = await this._paymentRetrievalService.RetrievePayments(model);

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOf <RetrievePaymentsResponse>(result);
            Assert.IsNotNull(result.Payments);
            Assert.IsInstanceOf <List <RetrievedPaymentDetails> >(result.Payments);
            Assert.AreEqual(1, result.Payments.Count);

            var payment = result.Payments[0];

            Assert.AreEqual(PaymentStatus.Success, payment.PaymentStatus);
            Assert.AreEqual(new DateTime(2020, 12, 01, 12, 0, 0), payment.PaymentDateTime);
            Assert.AreEqual(100.00M, payment.PaymentAmount);
            Assert.AreEqual(SupportedCurrencies.GBP, payment.Currency);
            Assert.AreEqual("XXXXXXXXXXXX0004", payment.CardNumber);
            Assert.AreEqual("Test Account", payment.CardHolder);
            Assert.AreEqual(CardType.MasterCard, payment.CardType);
            Assert.AreEqual("12", payment.ExpirationMonth);
            Assert.AreEqual("21", payment.ExpirationYear);
        }