Ejemplo n.º 1
0
        public async Task Should_Return_Error_When_NonCorrect_Pan_Request_For_PaymentByCreditCard()
        {
            var parameter = new ProductSelection();

            parameter.Slot           = 3;
            parameter.SugarLevel     = 0;
            parameter.SelectedPieces = 1;

            var responseProductSelection = await _client.PostAsJsonAsync("Automat/ProductSelection", parameter);

            var apiProductSelectionResult = await responseProductSelection.Content.ReadAsAsync <ProductSelectionResult>();

            PaymentByCreditCardEntity paymentByCreditCardEntity = new PaymentByCreditCardEntity();

            paymentByCreditCardEntity.TransactionId = apiProductSelectionResult.TransactionId;
            paymentByCreditCardEntity.Pan           = "";
            paymentByCreditCardEntity.Month         = 12;
            paymentByCreditCardEntity.Year          = 21;
            paymentByCreditCardEntity.Cvc           = "000";

            var response = await _client.PostAsJsonAsync("Automat/PaymentByCreditCard", paymentByCreditCardEntity);

            var apiResult = await response.Content.ReadAsAsync <TransactionResult>();

            Assert.True(1 == apiResult.Code);
            Assert.Equal($"CardInfo: {apiResult.TransactionId} Message: Kredi kartı bilgileri bulunamadı!", apiResult.Message);
        }
Ejemplo n.º 2
0
        public async Task Should_Return_Success_When_Send_Correct_Request_For_PaymentByCreditCard()
        {
            var parameter = new ProductSelection();

            parameter.Slot           = 3;
            parameter.SugarLevel     = 0;
            parameter.SelectedPieces = 1;

            var responseProductSelection = await _client.PostAsJsonAsync("Automat/ProductSelection", parameter);

            var apiProductSelectionResult = await responseProductSelection.Content.ReadAsAsync <ProductSelectionResult>();

            PaymentByCreditCardEntity paymentByCreditCardEntity = new PaymentByCreditCardEntity();

            paymentByCreditCardEntity.TransactionId = apiProductSelectionResult.TransactionId;
            paymentByCreditCardEntity.Pan           = "4355084355084358";
            paymentByCreditCardEntity.Month         = 12;
            paymentByCreditCardEntity.Year          = 21;
            paymentByCreditCardEntity.Cvc           = "000";

            var response = await _client.PostAsJsonAsync("Automat/PaymentByCreditCard", paymentByCreditCardEntity);

            var apiResult = await response.Content.ReadAsAsync <TransactionResult>();

            Assert.True(0 == apiResult.Code);
        }
Ejemplo n.º 3
0
        public async Task Should_Return_Error_When_Sending_Wrong_Card_Info_For_PaymentByCreditCard()
        {
            //Arrange
            var automatFacade = new AutomatFacade(new FakeProductRepository(), new FakeCampaingRepository(), new FakeTransactionRepository());

            //Act
            PaymentByCreditCardEntity paymentByCreditCardEntity = new PaymentByCreditCardEntity();

            paymentByCreditCardEntity.Pan   = "";
            paymentByCreditCardEntity.Year  = 2020;
            paymentByCreditCardEntity.Month = 12;
            var result = await automatFacade.PaymentByCreditCard(paymentByCreditCardEntity);

            //Assert
            Assert.Equal(1, result.Code);
        }
Ejemplo n.º 4
0
        public async Task Should_Return_Error_When_Send_Non_Transaction_Id_Request_For_PaymentByCreditCard()
        {
            PaymentByCreditCardEntity paymentByCreditCardEntity = new PaymentByCreditCardEntity();

            paymentByCreditCardEntity.TransactionId = -1;
            paymentByCreditCardEntity.Pan           = "4355084355084358";
            paymentByCreditCardEntity.Month         = 12;
            paymentByCreditCardEntity.Year          = 21;
            paymentByCreditCardEntity.Cvc           = "000";

            var response = await _client.PostAsJsonAsync("Automat/PaymentByCreditCard", paymentByCreditCardEntity);

            var apiResult = await response.Content.ReadAsAsync <TransactionResult>();

            Assert.True(1 == apiResult.Code);
            Assert.Equal($"TransactionId: {paymentByCreditCardEntity.TransactionId} Message: TransactionId değeri bulunamadı!", apiResult.Message);
        }
Ejemplo n.º 5
0
        public async Task Should_Return_Error_When_Sending_Paid_Transaction_Id_Request_For_PaymentByCreditCard()
        {
            PaymentByCreditCardEntity paymentByCreditCardEntity = new PaymentByCreditCardEntity();

            paymentByCreditCardEntity.TransactionId = 1;
            paymentByCreditCardEntity.Pan           = "4355084355084358";
            paymentByCreditCardEntity.Month         = 12;
            paymentByCreditCardEntity.Year          = 21;
            paymentByCreditCardEntity.Cvc           = "000";

            var response = await _client.PostAsJsonAsync("Automat/PaymentByCreditCard", paymentByCreditCardEntity);

            var apiResult = await response.Content.ReadAsAsync <TransactionResult>();

            Assert.True(1 == apiResult.Code);
            Assert.Equal($"Bu işlem Gerçekleşmiştir! Transaction id {paymentByCreditCardEntity.TransactionId}", apiResult.Message);
        }
Ejemplo n.º 6
0
        public async Task <TransactionResult> PaymentByCreditCard(PaymentByCreditCardEntity paymentEntity)
        {
            TransactionResult transactionResult = new TransactionResult();

            try
            {
                if (paymentEntity == null)
                {
                    transactionResult.Code    = 1;
                    transactionResult.Message = "null parameter";
                    return(transactionResult);
                }

                //In this line can be used luhn check algorithm for the credit card info!!!!
                if (string.IsNullOrEmpty(paymentEntity.Pan) || paymentEntity.Year == 0 ||
                    paymentEntity.Month == 0 || string.IsNullOrEmpty(paymentEntity.Cvc))
                {
                    transactionResult.TransactionId = paymentEntity.TransactionId;
                    transactionResult.Code          = 1;
                    transactionResult.Message       = $"CardInfo: {paymentEntity.TransactionId} Message: Kredi kartı bilgileri bulunamadı!";
                    return(transactionResult);
                }

                var transaction = await _transactionRepository.GetByIdAsync(paymentEntity.TransactionId);

                if (transaction == null)
                {
                    transactionResult.TransactionId = paymentEntity.TransactionId;
                    transactionResult.Code          = 1;
                    transactionResult.Message       = $"TransactionId: {paymentEntity.TransactionId} Message: TransactionId değeri bulunamadı!";

                    return(transactionResult);
                }

                var product = await _productRepository.GetByIdAsync(transaction.Slot);

                if (product == null)
                {
                    transactionResult.TransactionId = paymentEntity.TransactionId;
                    transactionResult.Slot          = transaction.Slot;
                    transactionResult.Code          = 1;
                    transactionResult.Message       = $"Slot: {transaction.Slot} Message: Slot bulunamadı!";

                    return(transactionResult);
                }

                if (transaction.IsPaid)
                {
                    transactionResult.TransactionId = paymentEntity.TransactionId;
                    transactionResult.Code          = 1;
                    transactionResult.Message       = $"Bu işlem Gerçekleşmiştir! Transaction id {paymentEntity.TransactionId}";
                    return(transactionResult);
                }

                //charge from the credit card in this line
                //if this process success

                transactionResult.TransactionId  = paymentEntity.TransactionId;
                transactionResult.Code           = 0;
                transactionResult.Message        = "Başarılı işlem";
                transactionResult.PaymentMethod  = "KREDI KART";
                transactionResult.ReversedAmount = 0;
                transactionResult.ProdcutName    = product.ProductName;
                transactionResult.Slot           = transaction.Slot;

                product.NumberOfProducts -= transaction.SelectedPieces;
                product.IsAvailable       = product.NumberOfProducts <= 0 ? false : true;

                await _productRepository.UpdateAsync(product);

                transaction.IsPaid = true;
                await _transactionRepository.UpdateAsync(transaction);

                return(transactionResult);
            }
            catch (Exception)
            {
                //logging
                transactionResult.TransactionId = paymentEntity.TransactionId;
                transactionResult.Code          = 1;
                transactionResult.Message       = "Hata oluştu!";
            }

            return(transactionResult);
        }
Ejemplo n.º 7
0
        public async Task <ActionResult <IEnumerable <TransactionResult> > > PaymentByCreditCard([FromBody] PaymentByCreditCardEntity paymentByCreditCardEntity)
        {
            var result = await _automatFacade.PaymentByCreditCard(paymentByCreditCardEntity);

            return(Ok(result));
        }