Пример #1
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);
        }
Пример #2
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);
        }
Пример #3
0
        public async Task Should_Return_Error_When_Null_Request()
        {
            var parameter = new ProductSelection();

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

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

            Assert.True(1 == apiResult.Code);
            Assert.Equal("null parameter", apiResult.Message);
        }
Пример #4
0
        public async Task Should_Return_Error_When_SelectedPieces_Bigger_Than_NumberOfProducts()
        {
            var parameter = new ProductSelection();

            parameter.Slot           = 99;
            parameter.SugarLevel     = 0;
            parameter.SelectedPieces = 100;

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

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

            Assert.True(1 == apiResult.Code);
        }
Пример #5
0
        public async Task Should_Return_Success_When_Correct_Request()
        {
            var parameter = new ProductSelection();

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

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

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

            Assert.True(0 == apiResult.Code);
        }
Пример #6
0
        public async Task Should_Return_Error_When_Send_Non_Product()
        {
            var parameter = new ProductSelection();

            parameter.Slot           = 999;
            parameter.SugarLevel     = 0;
            parameter.SelectedPieces = 100;

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

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

            Assert.True(1 == apiResult.Code);
            Assert.Equal($"Slot: {parameter.Slot} Message: Slot bulunamadı!", apiResult.Message);
        }
Пример #7
0
        public async Task Should_Return_Error_When_SelectedPieces_Bigger_Than_NumberOfProducts()
        {
            //Arrange
            var automatFacade = new AutomatFacade(new FakeProductRepository(), new FakeCampaingRepository(), new FakeTransactionRepository());

            //Act
            ProductSelection productSelection = new ProductSelection();

            productSelection.Slot           = 99;
            productSelection.SugarLevel     = 0;
            productSelection.SelectedPieces = 100;
            var result = await automatFacade.Selection(productSelection);

            //Assert
            Assert.Equal(1, result.Code);
        }
Пример #8
0
        public async Task Should_Return_Success_When_There_Is_A_Campaing()
        {
            //Arrange
            var automatFacade = new AutomatFacade(new FakeProductRepository(), new FakeCampaingRepository(), new FakeTransactionRepository());

            //Act
            ProductSelection productSelection = new ProductSelection();

            productSelection.Slot           = 1;
            productSelection.SugarLevel     = 0;
            productSelection.SelectedPieces = 1;
            var result = await automatFacade.Selection(productSelection);

            //Assert
            Assert.Equal(0, result.Code);
            Assert.Equal((decimal)4.950, result.TotalAmount);
        }
Пример #9
0
        public async Task Should_Return_Error_When_Send_Non_Product()
        {
            //Arrange
            var automatFacade = new AutomatFacade(new FakeProductRepository(), new FakeCampaingRepository(), new FakeTransactionRepository());
            var moq           = new Mock <FakeProductRepository>();

            moq.Setup(r => r.GetByIdAsync()).Returns(Task.FromResult <ProductEntity>(null));
            //Act

            ProductSelection productSelection = new ProductSelection();

            productSelection.Slot           = 99;
            productSelection.SugarLevel     = 0;
            productSelection.SelectedPieces = 100;
            var result = await automatFacade.Selection(productSelection);

            //Assert
            Assert.Equal(1, result.Code);
        }
Пример #10
0
        public async Task Should_Return_Success_When_Send_Correct_Request_For_PaymentByCash()
        {
            var parameter = new ProductSelection();

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

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

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

            PaymentByCashEntity paymentByCashEntity = new PaymentByCashEntity();

            paymentByCashEntity.TransactionId = apiProductSelectionResult.TransactionId;
            paymentByCashEntity.CashAmount    = apiProductSelectionResult.TotalAmount;

            var response = await _client.PostAsJsonAsync("Automat/PaymentByCash", paymentByCashEntity);

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

            Assert.True(0 == apiResult.Code);
        }
Пример #11
0
        public async Task Should_Return_Error_When_Send_Zero_CashAmount_Request_For_PaymentByCash()
        {
            var parameter = new ProductSelection();

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

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

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

            PaymentByCashEntity paymentByCashEntity = new PaymentByCashEntity();

            paymentByCashEntity.TransactionId = apiProductSelectionResult.TransactionId;
            paymentByCashEntity.CashAmount    = 0;

            var response = await _client.PostAsJsonAsync("Automat/PaymentByCash", paymentByCashEntity);

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

            Assert.True(1 == apiResult.Code);
            Assert.Equal("Lütfen para giriniz!", apiResult.Message);
        }
Пример #12
0
        public async Task <ProductSelectionResult> Selection(ProductSelection productSelection)
        {
            ProductSelectionResult productSelectionResult = new ProductSelectionResult();

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

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

                if (product == null)
                {
                    productSelectionResult.Slot    = productSelection.Slot;
                    productSelectionResult.Code    = 1;
                    productSelectionResult.Message = $"Slot: {productSelection.Slot} Message: Slot bulunamadı!";

                    return(productSelectionResult);
                }

                if (!product.IsAvailable)
                {
                    productSelectionResult.Slot    = productSelection.Slot;
                    productSelectionResult.Code    = 1;
                    productSelectionResult.Message = "Ürün Bitti!";
                    return(productSelectionResult);
                }

                if (product.NumberOfProducts < productSelection.SelectedPieces)
                {
                    productSelectionResult.Slot    = productSelection.Slot;
                    productSelectionResult.Code    = 1;
                    productSelectionResult.Message = $"NumberOfProducts: {product.NumberOfProducts} SelectedPieces: {productSelection.SelectedPieces}";
                    return(productSelectionResult);
                }

                var totalAmount = productSelection.SelectedPieces * product.PriceOfProduct;

                var campaings = await _campaingRepository.GetAllAsync();

                if (campaings != null && campaings.Count > 0)
                {
                    var campaing = campaings.Where(a => a.Slot == productSelection.Slot).FirstOrDefault();
                    if (campaing != null)
                    {
                        totalAmount += totalAmount * campaing.DiscountRatio;
                    }
                }

                TransactionEntity transactionEntity = new TransactionEntity();
                transactionEntity.Slot              = productSelection.Slot;
                transactionEntity.SelectedPieces    = productSelection.SelectedPieces;
                transactionEntity.TransactionAmount = totalAmount;

                transactionEntity = await _transactionRepository.AddAsync(transactionEntity);

                productSelectionResult.Slot          = productSelection.Slot;
                productSelectionResult.TransactionId = transactionEntity.Id;
                productSelectionResult.TotalAmount   = totalAmount;
                productSelectionResult.Code          = 0;
                productSelectionResult.Message       = "Başarılı işlem";
            }
            catch (Exception ex)
            {
                //logging
                productSelectionResult.Slot    = productSelection.Slot;
                productSelectionResult.Code    = 1;
                productSelectionResult.Message = "Hata oluştu!";
            }

            return(productSelectionResult);
        }
Пример #13
0
        public async Task <ActionResult <IEnumerable <ProductSelection> > > ProductSelection([FromBody] ProductSelection productSelection)
        {
            var result = await _automatFacade.Selection(productSelection);

            return(Ok(result));
        }