Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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());
        }
Beispiel #4
0
        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()));
        }