public void ACH_Add_Billing_Address_Charge_Request_Returns_Successfully()
        {
            // Arrange
            var request = new ChargeRequest
            {
                Amount = 10.00m,
                Check = new Check
                {
                    FirstName = "Jack",
                    LastName = "Test",
                    RoutingNumber = "222371863",
                    AccountNumber = "123456",
                    Address = new Address
                    {
                        Line1 = "123 Main St.",
                        City = "Austin",
                        State = "TX",
                        Zip = "78759"
                    },
                },
                DeveloperApplication = new DeveloperApplication
                {
                    DeveloperId = 12345678,
                    Version = "1.2"
                }
            };

            var apiContext = new APIContext();
            var controller = new PaymentsController();

            // Act
            var response = controller.ProcessRequest<ChargeResponse>(apiContext, request);

            // Assert
            Assert.IsNotNull(response);
            Assert.IsTrue(response.Success);
        }
        /// <summary>
        /// Successful response returned from a Credit Card Present Charge request.
        /// https://apidocs.securenet.com/docs/creditcardpresent.html?lang=JSON#charge
        /// </summary>
        public int Voids_Charge_Request_Returns_Successfully()
        {
            // Arrange
            var request = new ChargeRequest
            {
                Amount = 11.00m,
                Card = new Card
                {
                    TrackData = "%B4444333322221111^SECURENET^16041015432112345678?;4444333322221111=16041015432112345678?"
                },
                DeveloperApplication = new DeveloperApplication
                {
                    DeveloperId = 12345678,
                    Version = "1.2"
                }
            };

            var apiContext = new APIContext();
            var controller = new PaymentsController();

            // Act
            var response = controller.ProcessRequest<ChargeResponse>(apiContext, request);

            // Assert
            Assert.IsNotNull(response);
            Assert.IsTrue(response.Success);
            Assert.IsNotNull(response.Transaction);
            Assert.IsTrue(response.Transaction.TransactionId > 0);

            return response.Transaction.TransactionId;
        }
        public void ACH_Charge_Account_Using_POS_Request_Returns_Successfully()
        {
            // Arrange
            var request = new ChargeRequest
            {
                Amount = 11.00m,
                Check = new Check
                {
                    FirstName = "Jack",
                    LastName = "Test",
                    RoutingNumber = "222371863",
                    AccountNumber = "147852",
                    CheckNumber = "107",
                    AccountType = "SAVINGS",
                    CheckType = "POINT_OF_SALE",
                    Verification = "NONE",
                },
                ExtendedInformation = new ExtendedInformation
                {
                    AdditionalTerminalInfo = new AdditionalTerminalInfo
                    {
                        TerminalId = "1234",
                        TerminalCity = "Austin",
                        TerminalState = "TX",
                        TerminalLocation = "Office",
                        StoreNumber = "452"
                    }
                },
                DeveloperApplication = new DeveloperApplication
                {
                    DeveloperId = 12345678,
                    Version = "1.2"
                }
            };

            var apiContext = new APIContext();
            var controller = new PaymentsController();

            // Act
            var response = controller.ProcessRequest<ChargeResponse>(apiContext, request);

            // Assert
            Assert.IsNotNull(response);
            Assert.IsTrue(response.Success);
        }
        public void Credit_Card_Present_Charge_Request_Including_Address_Returns_Successfully()
        {
            // Arrange
            var request = new ChargeRequest
            {
                Amount = 11.00m,
                Card = new Card
                {
                    Number = "4444 3333 2222 1111",
                    Cvv = "999",
                    ExpirationDate = "04/2016",
                    Address = new Address
                    {
                        Line1 = "123 Main St.",
                        City = "Austin",
                        State = "TX",
                        Zip = "78759"
                    }
                },
                DeveloperApplication = new DeveloperApplication
                {
                    DeveloperId = 12345678,
                    Version = "1.2"
                }
            };

            var apiContext = new APIContext();
            var controller = new PaymentsController();

            // Act
            var response = controller.ProcessRequest<ChargeResponse>(apiContext, request);

            // Assert
            Assert.IsNotNull(response);
            Assert.IsTrue(response.Success);
        }
        /// <summary>
        /// Successful response returned from an Charge using Tokenization request.
        /// https://apidocs.securenet.com/docs/creditcardnotpresent.html?lang=csharp#tokenization
        /// </summary>
        public void Credit_Card_Not_Present_Charge_Using_Tokenization_Request_Returns_Successfully(string token)
        {
            // Arrange
            var request = new ChargeRequest
            {
                Amount = 10.00m,
                PaymentVaultToken = new PaymentVaultToken
                {
                    PaymentMethodId = token,
                    PublicKey = "278DCC4B-85FE-485D-AFDD-9927AC4CA229"
                },
                AddToVault = true,
                ExtendedInformation = new ExtendedInformation
                {
                    TypeOfGoods = "PHYSICAL"
                },
                DeveloperApplication = new DeveloperApplication
                {
                    DeveloperId = 12345678,
                    Version = "1.2"
                }
            };

            var apiContext = new APIContext();
            var controller = new PaymentsController();

            // Act
            var response = controller.ProcessRequest<ChargeResponse>(apiContext, request);

            // Assert
            Assert.IsNotNull(response);
            Assert.IsTrue(response.Success);
        }
        public void ACH_Pay_By_Check_Charge_Request_Returns_Successfully()
        {
            // Arrange
            var request = new ChargeRequest
            {
                Amount = 10.00m,
                Check = new Check
                {
                    FirstName = "Jack",
                    LastName = "Test",
                    RoutingNumber = "222371863",
                    AccountNumber = "123456"
                },
                DeveloperApplication = new DeveloperApplication
                {
                    DeveloperId = 12345678,
                    Version = "1.2"
                }
            };

            var apiContext = new APIContext();
            var controller = new PaymentsController();

            // Act
            var response = controller.ProcessRequest<ChargeResponse>(apiContext, request);

            // Assert
            Assert.IsNotNull(response);
            Assert.IsTrue(response.Success);
        }
        /// <summary>
        /// Successful response returned from a Pay with Stored Vault Account request.
        /// https://apidocs.securenet.com/docs/vault.html?lang=csharp#payaccount
        /// </summary>
        public void SecureNet_Vault_Pay_With_Stored_Vault_Account_Request_Returns_Successfully(string customerId, string paymentMethodId)
        {
            // Arrange
            var request = new ChargeRequest
            {
                Amount = 11.00m,
                PaymentVaultToken = new PaymentVaultToken
                {
                    CustomerId = customerId,
                    PaymentMethodId = paymentMethodId,
                    PaymentType = "CREDIT_CARD"
                },
                DeveloperApplication = new DeveloperApplication
                {
                    DeveloperId = 12345678,
                    Version = "1.2"
                }
            };

            var apiContext = new APIContext();
            var controller = new CustomersController();

            // Act
            var response = controller.ProcessRequest<ChargeResponse>(apiContext, request);

            // Assert
            Assert.IsNotNull(response);
            Assert.IsTrue(response.Success);
        }
        public void SecureNet_Vault_Store_Account_After_Charge_Request_Returns_Successfully()
        {
            // Arrange
            var request = new ChargeRequest
            {
                Amount = 11.00m,
                AddToVault = true,
                Card = new Card
                {
                    Number = "4444 3333 2222 1111",
                    ExpirationDate = "04/2016",
                    Address = new Address
                    {
                        Line1 = "123 Main St.",
                        City = "Austin",
                        State = "TX",
                        Zip = "78759"
                    }
                },
                DeveloperApplication = new DeveloperApplication
                {
                    DeveloperId = 12345678,
                    Version = "1.2"
                }
            };

            var apiContext = new APIContext();
            var controller = new CustomersController();

            // Act
            var response = controller.ProcessRequest<ChargeResponse>(apiContext, request);

            // Assert
            Assert.IsNotNull(response);
            Assert.IsTrue(response.Success);
        }