public async Task Unit_ProcessClosedPayment_ExpectBadRequest() { Account newAccount = new Account { Name = "Test Account" }; _context.Accounts.Add(newAccount); _context.SaveChanges(); Transaction deposit = new Transaction { AccountId = newAccount.Id, Amount = 1000000, Date = new DateTime(2020, 1, 1), TransactionStatus = TransactionStatusEnum.Processed, TransactionType = TransactionTypeEnum.Deposit, CreationDate = new DateTime(2020, 1, 1), LastUpdateDate = new DateTime(2020, 1, 1) }; _context.Transactions.Add(deposit); _context.SaveChanges(); Transaction payment = new Transaction { AccountId = newAccount.Id, Amount = 1000, Date = new DateTime(2020, 1, 1), TransactionStatus = TransactionStatusEnum.Closed, TransactionType = TransactionTypeEnum.Withdrawal, CreationDate = new DateTime(2020, 1, 1), LastUpdateDate = new DateTime(2020, 1, 1) }; _context.Transactions.Add(payment); _context.SaveChanges(); TransactionUpdaterService updater = new TransactionUpdaterService(_mockPaymentLogger.Object, _mapper, newAccount.Id, payment.Id, _accountRepo, _transRepo, TransactionStatusEnum.Processed, Messages.Payment_FailedToProcess); ServiceResult result = await updater.UpdateTransaction(); result.Should().NotBeNull(); result.StatusCode.Should().Be(StatusCodes.Status400BadRequest); result.ContentResult.Should().Contain(Messages.Payment_StatusIsClosed); }
public async Task Unit_ProcessPendingPayment_AccountDoesNotExist_ExpectNotFound() { TransactionUpdaterService updater = new TransactionUpdaterService(_mockPaymentLogger.Object, _mapper, 1000, 10000, _accountRepo, _transRepo, TransactionStatusEnum.Processed, Messages.Payment_FailedToProcess); ServiceResult result = await updater.UpdateTransaction(); result.Should().NotBeNull(); result.StatusCode.Should().Be(StatusCodes.Status404NotFound); result.ContentResult.Should().Contain(Messages.Account_AccountNotFound); }
public async Task Unit_ProcessPendingPayment_ExpectPaymentProcessedInResult() { Account newAccount = new Account { Name = "Test Account" }; _context.Accounts.Add(newAccount); _context.SaveChanges(); Transaction deposit = new Transaction { AccountId = newAccount.Id, Amount = 1000000, Date = new DateTime(2020, 1, 1), TransactionStatus = TransactionStatusEnum.Processed, TransactionType = TransactionTypeEnum.Deposit, CreationDate = new DateTime(2020, 1, 1), LastUpdateDate = new DateTime(2020, 1, 1) }; _context.Transactions.Add(deposit); _context.SaveChanges(); Transaction payment = new Transaction { AccountId = newAccount.Id, Amount = 1000, Date = new DateTime(2020, 1, 1), TransactionStatus = TransactionStatusEnum.Pending, TransactionType = TransactionTypeEnum.Withdrawal, CreationDate = new DateTime(2020, 1, 1), LastUpdateDate = new DateTime(2020, 1, 1) }; _context.Transactions.Add(payment); _context.SaveChanges(); TransactionUpdaterService updater = new TransactionUpdaterService(_mockPaymentLogger.Object, _mapper, newAccount.Id, payment.Id, _accountRepo, _transRepo, TransactionStatusEnum.Processed, Messages.Payment_FailedToProcess); ServiceResult result = await updater.UpdateTransaction(); result.Should().NotBeNull(); result.StatusCode.Should().Be(StatusCodes.Status200OK); TransactionResultDto transaction = JsonConvert.DeserializeObject <TransactionResultDto>(result.ContentResult); transaction.Should().NotBeNull(); transaction.AccountId.Should().Be(newAccount.Id); transaction.Amount.Should().Be(1000); transaction.Date.Should().Be(new DateTime(2020, 1, 1)); transaction.TransactionStatus.Should().Be(TransactionStatusEnum.Processed.ToString()); }
public void Total_Sum_Of_Transactions_For_T2006_Should_Be_Expected_Result() { // Arrange const string ratesEndpoint = "https://www.jefrijmartinez.com/rates.json"; const string transactionsEndpoint = "https://www.jefrijmartinez.com/transactions.json"; const string defaultCurrency = "EUR"; var mockRateService = new Mock <IRateService>(); var mockTransactionService = new Mock <ITransactionService>(); mockRateService.Setup(r => r.GetAllAsync(ratesEndpoint)) .Returns(() => Task.FromResult <IList <Rate> >(new List <Rate>() { new Rate() { From = "EUR", To = "USD", ConversionRate = 1.359m }, new Rate() { From = "CAD", To = "EUR", ConversionRate = 0.732m }, new Rate() { From = "USD", To = "EUR", ConversionRate = 0.736m }, new Rate() { From = "EUR", To = "CAD", ConversionRate = 1.366m } })); mockTransactionService.Setup(r => r.GetAllAsync(transactionsEndpoint)) .Returns(() => Task.FromResult <IList <Transaction> >(new List <Transaction>() { new Transaction() { Sku = "T2006", Amount = 10.00m, Currency = "USD" }, new Transaction() { Sku = "M2007", Amount = 34.57m, Currency = "CAD" }, new Transaction() { Sku = "R2008", Amount = 17.95m, Currency = "USD" }, new Transaction() { Sku = "T2006", Amount = 7.63m, Currency = "EUR" }, new Transaction() { Sku = "B2009", Amount = 21.23m, Currency = "USD" } })); // Act var rateService = mockRateService.Object; var transactionService = mockTransactionService.Object; var _rateCrosserService = new RateCrosserService(); var _transactionUpdaterService = new TransactionUpdaterService(); var rates = rateService.GetAllAsync(ratesEndpoint).Result; var transactions = transactionService.GetAllAsync(transactionsEndpoint).Result.ToList(); _rateCrosserService.CrossRates(ref rates); // Cross all rates to get the ones that does not exist. transactions.ForEach(transaction => // Updates transactions amount. _transactionUpdaterService.UpdateAmount(ref transaction, defaultCurrency, rates) ); var totalAmount = transactions.Where(x => x.Sku == "T2006").Sum(x => x.Amount); // Assert Assert.Equal(14.99m, totalAmount); }
public async Task <IActionResult> CancelPayment([FromBody] TransactionCancelDto objDto) { TransactionUpdaterService updater = new TransactionUpdaterService(_logger, _mapper, (int)objDto.AccountId, (int)objDto.TransactionId, _accountRepo, _transRepo, TransactionStatusEnum.Closed, Messages.Payment_FailedToCancel, objDto.Reason); return(this.GetActionResultFromServiceResult(await updater.UpdateTransaction())); }