public void Sale_ReturnsSuccessfulResponseWithPartialSettlement()
{
var request = new TransactionRequest
{
Amount = SandboxValues.TransactionAmount.AUTHORIZE,
CreditCard = new TransactionCreditCardRequest
{
Number = SandboxValues.CreditCardNumber.MASTER_CARD,
ExpirationDate = "05/2009",
}
};
Result<Transaction> authorizationResult = gateway.Transaction.Sale(request);
Assert.IsTrue(authorizationResult.IsSuccess());
Transaction authorizedTransaction = authorizationResult.Target;
Assert.AreEqual(1000.00, authorizedTransaction.Amount);
Assert.AreEqual(TransactionType.SALE, authorizedTransaction.Type);
Assert.AreEqual(TransactionStatus.AUTHORIZED, authorizedTransaction.Status);
Assert.IsNotNull(authorizedTransaction.ProcessorAuthorizationCode);
var partialSettlementResult1 = gateway.Transaction.SubmitForPartialSettlement(authorizedTransaction.Id, 400);
var partialSettlementTransaction1 = partialSettlementResult1.Target;
Assert.AreEqual(400.00, partialSettlementTransaction1.Amount);
Assert.AreEqual(TransactionType.SALE, partialSettlementTransaction1.Type);
Assert.AreEqual(TransactionStatus.SUBMITTED_FOR_SETTLEMENT, partialSettlementTransaction1.Status);
Assert.AreEqual(authorizedTransaction.Id, partialSettlementTransaction1.AuthorizedTransactionId);
var refreshedAuthorizedTransaction = gateway.Transaction.Find(authorizedTransaction.Id);
Assert.AreEqual(TransactionStatus.SETTLEMENT_PENDING, refreshedAuthorizedTransaction.Status);
var partialSettlementTransactionIds = new string[] { partialSettlementTransaction1.Id };
Assert.AreEqual(refreshedAuthorizedTransaction.PartialSettlementTransactionIds, partialSettlementTransactionIds);
var partialSettlementResult2 = gateway.Transaction.SubmitForPartialSettlement(authorizedTransaction.Id, 600);
var partialSettlementTransaction2 = partialSettlementResult2.Target;
Assert.AreEqual(600.00, partialSettlementTransaction2.Amount);
Assert.AreEqual(TransactionType.SALE, partialSettlementTransaction2.Type);
Assert.AreEqual(TransactionStatus.SUBMITTED_FOR_SETTLEMENT, partialSettlementTransaction2.Status);
refreshedAuthorizedTransaction = gateway.Transaction.Find(authorizedTransaction.Id);
partialSettlementTransactionIds = new string[] { partialSettlementTransaction1.Id, partialSettlementTransaction2.Id };
CollectionAssert.AreEquivalent(refreshedAuthorizedTransaction.PartialSettlementTransactionIds, partialSettlementTransactionIds);
}