/// <summary>
        /// Mocks the response of the Stone API and converts it to the domain specific response.
        /// </summary>
        /// <returns>Domain specific Response object</returns>
        public static Operators.Response MockStoneResponse(Operators.Request request)
        {
            // The Stone API returns a regular c# object, could easily be parsed to the domain Response.
            var status = request.Transaction.CreditCard.CreditCardNumber == POOR_GUY_NUMBER
                ? Operators.ResponseStatus.Denied
                : Operators.ResponseStatus.Approved;

            return(new Operators.Response(request, status));
        }
        public void successfullyCreatesOperatorRequest()
        {
            // Setup
            var transaction = new Operators.Transaction(Test.Amount, Test.Card, Test.Installments);
            var request     = new Operators.Request(transaction, Test.OrderId);

            // Assertions
            Assert.Equal("Carlos", request.Customer.Name);
            Assert.Equal(Test.OrderId, request.OrderId);
            Assert.Equal(400, request.Transaction.AmountInCents);
            Assert.Equal(Test.Installments, request.Transaction.InstallmentCount);
        }
Esempio n. 3
0
        public void poorCustomerIsDenied()
        {
            var poorCard = PersonRepository.GetCard("963258");
            var transaction = new Operators.Transaction(Test.Amount, poorCard, Test.Installments);
            var order = new AntiFraud.Order(Test.Store, Test.Items, transaction, Test.OrderId);

            // Operator step
            var request = new Operators.Request(transaction, Test.OrderId);
            var response = RequestManager.MakeCieloRequest(request);

            Assert.Equal(3, response.Status);
            Assert.Equal("4", response.ReturnCode);
        }
Esempio n. 4
0
        /// <summary>
        /// Makes a sale request.
        /// </summary>
        /// <param name="items">Items to be sold</param>
        /// <param name="installments">Number of installments</param>
        /// <param name="card">Customer credit card</param>
        /// <param name="operatorIndex">Index of the operator</param>
        public void MakeRequest(IEnumerable <AntiFraud.Item> items, int installments, Operators.CreditCard card, int operatorIndex)
        {
            if (operatorIndex > Store.Operators.Count() - 1)
            {
                throw new InvalidOperationException("Invalid operator!");
            }

            // Creates the transaction
            var amount      = items.Sum(i => i.ItemValue * i.Qty);
            var transaction = new Operators.Transaction(amount, card, installments);
            var orderId     = Guid.NewGuid().ToString();

            // Check AntiFraud
            if (evaluateAntiFraud(items, transaction, orderId))
            {
                // Makes request to the operator
                var request = new Operators.Request(transaction, orderId);
                Operators.Response response;

                var op = Store.Operators.ElementAt(operatorIndex);
                switch (op.Brand)
                {
                case OperatorBrandEnum.Cielo:
                    response = RequestManager.MakeCieloRequest(request);
                    break;

                case OperatorBrandEnum.Stone:
                    response = RequestManager.MakeStoneRequest(request, Store.MerchantId);
                    break;

                default:
                    throw new NotImplementedException("Unknown operator!");
                }

                handleOperatorResponse(response);
            }
            else
            {
                transaction.Authorized = false;
                transaction.Message    = "Transaction denied by the anti-fraud system.";
                StoreRepository.SaveTransaction(transaction);
            }
        }
Esempio n. 5
0
        public void validRequestIsAuthorized()
        {
            var transaction = new Operators.Transaction(Test.Amount, Test.Card, Test.Installments);
            var order = new AntiFraud.Order(Test.Store, Test.Items, transaction, Test.OrderId);

            // Antifraud step
            var orders = new List<AntiFraud.Order>() { order };
            var req1 = new AntiFraud.Request(Test.Store.AntiFraudInfo.ApiKey, Test.Store.AntiFraudInfo.LoginToken, orders, "BRA");
            var jsonRequest = JsonConvert.SerializeObject(req1);
            var responseAF = ApiResponseMock.MockClearSaleResponse(orders, jsonRequest);
            var allValid = responseAF.All(r => r.AllValid);

            // Operator step
            var req2 = new Operators.Request(transaction, Test.OrderId);
            var responseOP = RequestManager.MakeCieloRequest(req2);

            // Assertions
            Assert.True(allValid);
            Assert.Equal(1, responseOP.Status);
            Assert.Equal("0", responseOP.ReturnCode);
        }