/// <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); }
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); }
/// <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); } }
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); }