public void RetrievePaymentThrowsHttpExceptionWhenBankingApiCallEncountersAnUnpectedError() { //Arrange var bankDto = new BankRetrievePaymentsRequestDto() { TransactionId = new Guid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa") }; var httpClient = new HttpClient(this._handler.Object) { BaseAddress = null }; this._bankingService = new BankingService(this._bankingApiConfiguration.Object, httpClient, this._logger.Object); //Act - see assertion. //Assert var ex = Assert.ThrowsAsync <HttpException>(() => this._bankingService.RetrievePayments(bankDto)); Assert.AreEqual(HttpStatusCode.InternalServerError, ex.StatusCode); Assert.AreEqual(Resources.ErrorMessage_BankingApiUnexpectedError, ex.Message); Assert.AreEqual(Resources.ErrorCode_BankingApiUnexpectedError, 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 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 BankRetrievePaymentsRequestDto MapRetrievePaymentsRequestModelToBankDto(RetrievePaymentsRequestDto model) { if (model == null) { this._logger.LogError(Resources.Logging_DtoMapperNullInput, (typeof(RetrievePaymentsRequestDto).Name)); throw new HttpException(HttpStatusCode.InternalServerError, Resources.ErrorCode_MappingError_PaymentApiToBankApi, Resources.ErrorMessage_MappingError_PaymentApiToBankApi); } var bankDto = new BankRetrievePaymentsRequestDto() { TransactionId = model.TransactionId.Value }; return(bankDto); }
public void RetrievePaymentThrowsHttpExceptionWhenBankingApiRespondsUnsuccessfully() { //Arrange var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.InternalServerError); 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 - see assertion. //Assert var ex = Assert.ThrowsAsync <HttpException>(() => this._bankingService.RetrievePayments(bankDto)); Assert.AreEqual(HttpStatusCode.BadGateway, ex.StatusCode); Assert.AreEqual(string.Format(Resources.ErrorMessage_BankingApiUnsuccesfulResponse, "500", "Internal Server Error"), ex.Message); Assert.AreEqual(Resources.ErrorCode_BankingApiUnsuccesfulResponse, ex.ErrorCode); }
public async Task <BankRetrievePaymentsResponseDto> RetrievePayments(BankRetrievePaymentsRequestDto bankDto) { var endpoint = string.Format(this._configuration["bankingApi:paymentsEndpointGet"], bankDto.TransactionId.ToString()); return(await this.SendHttpRequest <BankRetrievePaymentsResponseDto>(HttpVerbs.Get, endpoint)); }
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); }