예제 #1
0
        public async Task SaveTransactionDetails_ShouldSavePayment_WhenGivenValidDetails()
        {
            var expectedTransactionDetails = new TransactionDetailsDTO
            {
                TransactionID    = 8765,
                Success          = true,
                PaymentDetailsID = 221,
                CreatedDate      = new DateTime(2021, 5, 19, 22, 17, 00)
            };

            await _transactionRepository.SaveTransactionDetails(expectedTransactionDetails);

            var getTransactionDetails = $@"SELECT 
	                                        TransactionID,
                                            Success,
                                            PaymentDetailsID,
                                            CreatedDate
                                         FROM {_databaseName}.transaction_details;";

            await using var connection = new MySqlConnection(ConnectionString);
            await connection.OpenAsync();

            var dt = new DataTable("TransactionDetails");

            await using var command = new MySqlCommand(getTransactionDetails, connection);
            var da = new MySqlDataAdapter(command);

            da.Fill(dt);

            var actual = (from DataRow row in dt.Rows
                          select new TransactionDetailsDTO
            {
                TransactionID = Convert.ToInt64(row[dt.Columns["TransactionID"].Ordinal]),
                Success = Convert.ToBoolean(row[dt.Columns["Success"].Ordinal]),
                PaymentDetailsID = Convert.ToInt32(row[dt.Columns["PaymentDetailsID"].Ordinal]),
                CreatedDate = Convert.ToDateTime(row[dt.Columns["CreatedDate"].Ordinal])
            }).ToList().FirstOrDefault();

            Assert.Equal(expectedTransactionDetails.TransactionID, actual.TransactionID);
            Assert.Equal(expectedTransactionDetails.Success, actual.Success);
            Assert.Equal(expectedTransactionDetails.PaymentDetailsID, actual.PaymentDetailsID);
            Assert.Equal(expectedTransactionDetails.CreatedDate, actual.CreatedDate);
        }
예제 #2
0
        public async Task <bool> SaveTransactionDetails(TransactionDetailsDTO transactionDetails)
        {
            var insertTransactionDetailsQuery = $@"
                USE {_mySqlConfig.PaymentGatewayDB};
                INSERT INTO transaction_details (
                    TransactionID, 
                    Success, 
                    PaymentDetailsID, 
                    CreatedDate) 
                VALUES (
                    @TransactionID, 
                    @Success, 
                    @PaymentDetailsID, 
                    @CreatedDate);";

            try
            {
                await using var _connection = new MySqlConnection(_mySqlConfig.ConnectionString);
                var inserted = await _connection.ExecuteAsync(insertTransactionDetailsQuery,
                                                              new
                {
                    transactionDetails.TransactionID,
                    transactionDetails.Success,
                    transactionDetails.PaymentDetailsID,
                    transactionDetails.CreatedDate
                });

                return(inserted > 0);
            }
            catch (MySqlException e)
            {
                _logger.Error(e, "Error saving transaction details");
                throw;
            }
            catch (Exception e)
            {
                _logger.Error(e, "Error saving transaction details");
                throw;
            }
        }
        public async Task <ActionResult <TransactionStatusDTO> > InsertTransactionDetails([FromBody] TransactionDetailsDTO td)
        {
            var curTrans = await TB.GetTransaction(td.TransactionId);

            var transDetails = mapper.Map <TransactionDetail>(td);
            var curStatus    = TB.GetTransactionStatusName((int)curTrans.CurrentStatus);
            var nextStatus   = TB.GetTransactionStatusName(transDetails.StatusId);

            if (CanNextStatus((int)curTrans.CurrentStatus, transDetails.StatusId))
            {
                try
                {
                    curTrans.CurrentStatus = transDetails.StatusId;
                    var updatedTH = await UpdateStatus(curTrans);

                    return(Ok(mapper.Map <TransactionStatusDTO>(await TB.InsertTransactionDetail(transDetails))));
                }
                catch (Exception ex)
                {
                    return(BadRequest(ex.Message));
                }
            }
            else
            {
                return(BadRequest($"Current status is {curStatus}, can't be added or updateed to {nextStatus}"));
            }
        }
예제 #4
0
        public async Task GetTransactionHistoryById_ShouldGetTransactionHistory_WhenTransactionHistoryExists()
        {
            var transactionID = 2121;

            var expectedCardNumber     = "1234123412341266";
            var expectedCardHolderName = "John J";
            var expectedAmount         = 734.7m;
            var expectedCurrency       = "GBP";
            var expectedSuccess        = true;
            var expectedCreatedDate    = new DateTime(2021, 5, 19, 22, 17, 00);

            var paymentDetails = new PaymentDetailsDTO
            {
                CardNumber     = expectedCardNumber,
                ExpiryMonth    = 5,
                ExpiryDate     = 23,
                CardHolderName = expectedCardHolderName,
                Amount         = expectedAmount,
                Currency       = expectedCurrency,
                CVV            = "111"
            };

            var transactionDetails = new TransactionDetailsDTO
            {
                TransactionID    = transactionID,
                Success          = expectedSuccess,
                PaymentDetailsID = 1,
                CreatedDate      = expectedCreatedDate
            };

            var insertDetails = $@"INSERT INTO {_databaseName}.payment_details 
                                    (`CardNumber`,
                                    `ExpiryMonth`,
                                    `ExpiryDate`,
                                    `CardHolderName`,
                                    `Amount`,
                                    `Currency`,
                                    `CVV`)
                                  VALUES 
                                    (@CardNumber, 
                                     @ExpiryMonth, 
                                     @ExpiryDate, 
                                     @CardHolderName,
                                     @Amount,
                                     @Currency,
                                     @CVV);
                                 INSERT INTO {_databaseName}.transaction_details
                                    (`TransactionID`,
                                    `Success`,
                                    `PaymentDetailsID`,
                                    `CreatedDate`)
                                 VALUES
                                    (@TransactionID, 
                                     @Success, 
                                     @PaymentDetailsID, 
                                     @CreatedDate);";

            await using var connection = new MySqlConnection(ConnectionString);
            await connection.OpenAsync();

            await using var command = new MySqlCommand(insertDetails, connection);
            command.Parameters.AddWithValue("@CardNumber", paymentDetails.CardNumber);
            command.Parameters.AddWithValue("@ExpiryMonth", paymentDetails.ExpiryMonth);
            command.Parameters.AddWithValue("@ExpiryDate", paymentDetails.ExpiryDate);
            command.Parameters.AddWithValue("@CardHolderName", paymentDetails.CardHolderName);
            command.Parameters.AddWithValue("@Amount", paymentDetails.Amount);
            command.Parameters.AddWithValue("@Currency", paymentDetails.Currency);
            command.Parameters.AddWithValue("@CVV", paymentDetails.CVV);
            command.Parameters.AddWithValue("@TransactionID", transactionDetails.TransactionID);
            command.Parameters.AddWithValue("@Success", transactionDetails.Success);
            command.Parameters.AddWithValue("@PaymentDetailsID", transactionDetails.PaymentDetailsID);
            command.Parameters.AddWithValue("@CreatedDate", transactionDetails.CreatedDate);

            command.ExecuteNonQuery();

            var actual = await _transactionRepository.GetTransactionHistoryById(transactionID);

            Assert.Equal(expectedCardNumber, actual.CardNumber);
            Assert.Equal(expectedCardHolderName, actual.CardHolderName);
            Assert.Equal(expectedAmount, actual.Amount);
            Assert.Equal(expectedSuccess, actual.Success);
            Assert.Equal(expectedCreatedDate, actual.CreatedDate);
        }