public async Task Handle_BankResponseSuccessful_SendsProcessSuccessfulPaymentRequest() { //arrange var merchantId = _fixture.Create <string>(); _merchantContext.Setup(x => x.GetMerchantId()).Returns(merchantId); var successfulTransferResponse = _fixture.Create <TransferFundsSuccessfulResponse>(); _mockBankApiClient .Setup(x => x.TransferFunds(It.IsAny <TransferFundsRequest>())) .ReturnsAsync(TransferFundsResponse.Successful(successfulTransferResponse)); var request = _fixture.Create <CreatePaymentRequest>(); var expected = new ProcessSuccessfulPaymentRequest { Source = new ProcessSuccessfulPaymentRequest.PaymentSource { Cvv = request.Source.Cvv, CardExpiry = request.Source.CardExpiry, CardNumber = request.Source.CardNumber, }, Recipient = new ProcessSuccessfulPaymentRequest.PaymentRecipient { SortCode = request.Recipient.SortCode, AccountNumber = request.Recipient.AccountNumber }, Currency = request.Currency, Amount = request.Amount, Merchant = new ProcessSuccessfulPaymentRequest.MerchantDetails { Id = merchantId, }, BankResponse = new ProcessSuccessfulPaymentRequest.BankPaymentResponse { TransactionId = successfulTransferResponse.Id.ToString() } }; //act await _createPaymentHandler.Handle(request); //assert _mediator.Verify(x => x.Send(It.Is <ProcessSuccessfulPaymentRequest>(req => req.Should().BeEquivalentToBool(expected)), It.IsAny <CancellationToken>()), Times.Once); }
private void SetupMockDefaults() { _mediator .Setup(x => x.Send(It.IsAny <ProcessSuccessfulPaymentRequest>(), It.IsAny <CancellationToken>())) .ReturnsAsync(_fixture.Create <ProcessSuccessfulPaymentResponse>()); _mediator .Setup(x => x.Send(It.IsAny <ProcessRejectedPaymentRequest>(), It.IsAny <CancellationToken>())) .ReturnsAsync(_fixture.Create <ProcessRejectedPaymentResponse>()); _merchantContext .Setup(x => x.GetMerchantId()) .Returns(_fixture.Create <string>()); _mockBankApiClient .Setup(x => x.TransferFunds(It.IsAny <TransferFundsRequest>())) .ReturnsAsync(TransferFundsResponse.Successful(_fixture.Create <TransferFundsSuccessfulResponse>())); }
public async Task Handle_BankResponseSuccessful_ReturnsExpectedSuccessResponse() { //arrange var processSuccessfulPaymentResponse = _fixture.Create <ProcessSuccessfulPaymentResponse>(); _mediator .Setup(x => x.Send(It.IsAny <ProcessSuccessfulPaymentRequest>(), It.IsAny <CancellationToken>())) .ReturnsAsync(processSuccessfulPaymentResponse); _mockBankApiClient .Setup(x => x.TransferFunds(It.IsAny <TransferFundsRequest>())) .ReturnsAsync(TransferFundsResponse.Successful(_fixture.Create <TransferFundsSuccessfulResponse>())); //act var res = await _createPaymentHandler.Handle(_fixture.Create <CreatePaymentRequest>()); //assert res.StatusCode.Should().Be(StatusCodes.Status201Created); res.SuccessResponse.Status.Should().Be(PaymentStatus.Succeeded); res.SuccessResponse.PaymentId.Should().Be(processSuccessfulPaymentResponse.Id); }
private async Task <TransferFundsResponse> TransferFundsResponseInternal(TransferFundsRequest request) { var response = await _httpClient.PostAsync( "api/payment", new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json")); var responseBody = await response.Content.ReadAsStringAsync(); if (!response.IsSuccessStatusCode) { if (response.StatusCode == (HttpStatusCode)HttpStatusCodeUnprocessableEntity) { return(TransferFundsResponse.Error((int)response.StatusCode, JsonConvert.DeserializeObject <TransferFundsErrorResponse>(responseBody))); } else { return(TransferFundsResponse.UnknownError((int)response.StatusCode)); } } var deserialized = JsonConvert.DeserializeObject <TransferFundsSuccessfulResponse>(responseBody); return(TransferFundsResponse.Successful(deserialized)); }