public async Task ValidCardPaymentReturnsSuccess() { var transactionServiceMock = new Mock <ITransactionService>(); var bankServiceMock = new Mock <IBankService>(); var modelConverter = new ModelConverter(new MaskingService()); var loggerMock = new Mock <ILogger <CardPaymentService> >(); var cardPaymentService = new CardPaymentService(transactionServiceMock.Object, bankServiceMock.Object, modelConverter, loggerMock.Object); var cardPaymentRequest = ModelDataHelper.GetValidCardPaymentRequest(); var merchant = ModelDataHelper.GetTestMerchant(); var cardPaymentContext = modelConverter.CreateCardPaymentContext(cardPaymentRequest, merchant); var transaction = new Transaction() { TransactionId = Guid.NewGuid().ToString(), CardDetail = cardPaymentContext.CardDetail, Amount = cardPaymentContext.Amount, MerchantId = merchant.Id, MerchantReference = cardPaymentContext.MerchantReference, RequestedOn = DateTime.UtcNow }; transactionServiceMock.Setup(x => x.InitialiseTransactionAsync(It.IsAny <CardPaymentContext>())).ReturnsAsync(transaction); var bankResponse = new BankResponse() { Id = "BNK_111", Status = BankResponseStatus.Success, Details = "Authorised" }; bankServiceMock.Setup(x => x.ExecuteAsync(It.IsAny <BankCardRequest>())).ReturnsAsync(bankResponse); var updatedTransaction = transaction; updatedTransaction.BankDetails = bankResponse.Details; updatedTransaction.BankReference = bankResponse.Id; updatedTransaction.Status = TransactionStatus.Fulfilled; updatedTransaction.ProcessedOn = DateTime.UtcNow; transactionServiceMock.Setup(x => x.UpdateTransactionAsync(transaction.TransactionId, bankResponse)).ReturnsAsync(updatedTransaction); var response = await cardPaymentService.ProcessAsync(cardPaymentRequest, merchant); response.Should().NotBeNull(); response.Amount.Should().Be(cardPaymentRequest.Amount); response.Currency.Should().Be(cardPaymentRequest.CurrencyCode); response.Success.Should().BeTrue(); response.Status.Should().Be("fulfilled"); response.BankReference.Should().Be(bankResponse.Id); }
public async Task ValidCardReturnsSuccess() { var bankService = new BankService(); var request = ModelDataHelper.GetBankCardRequest(500); var response = await bankService.ExecuteAsync(request); response.Should().NotBeNull(); response.Id.Should().NotBeNullOrEmpty(); response.Status.Should().Be(BankResponseStatus.Success); response.Details.Should().NotBeNullOrEmpty(); }
public async Task InValidCardReturnsFailure(int amount, string bankResponse) { var bankService = new BankService(); var request = ModelDataHelper.GetBankCardRequest(amount); var response = await bankService.ExecuteAsync(request); response.Should().NotBeNull(); response.Id.Should().NotBeNullOrEmpty(); response.Status.Should().Be(BankResponseStatus.Failed); response.Details.Should().NotBeNullOrEmpty(); response.Details.Should().Be(bankResponse); }
public void CardPaymentContextShouldContainNecessaryDetails() { var maskingServiceMock = new Mock <IMaskingService>(); var modelConverter = new ModelConverter(maskingServiceMock.Object); var cardPaymentRequest = ModelDataHelper.GetValidCardPaymentRequest(); var merchant = ModelDataHelper.GetTestMerchant(); var cardContext = modelConverter.CreateCardPaymentContext(cardPaymentRequest, merchant); cardContext.Should().NotBeNull(); cardContext.Amount.Should().Be(cardPaymentRequest.Amount); cardContext.CardDetail.Should().NotBeNull(); cardContext.CardDetail.Name.Should().Be(cardPaymentRequest.Name); cardContext.CardDetail.CurrencyCode.Should().Be(cardPaymentRequest.CurrencyCode); cardContext.CardDetail.ExpiryMonth.Should().Be(cardPaymentRequest.ExpiryMonth); cardContext.CardDetail.ExpiryYear.Should().Be(cardPaymentRequest.ExpiryYear); cardContext.MerchantReference.Should().Be(cardPaymentRequest.Reference); cardContext.MerchantId.Should().Be(merchant.Id); }