public void Find_RaisesNotFoundErrorWhenTokenDoesntExist()
        {
            UsBankAccountGateway usBankAccountGateway = new UsBankAccountGateway(gateway);
            string nonce = TestHelper.GenerateInvalidUsBankAccountNonce();

            Assert.Throws <NotFoundException>(() => usBankAccountGateway.Find(nonce));
        }
        public void Find_FindsUsBankAccountWithToken()
        {
            Result <Customer> result = gateway.Customer.Create(new CustomerRequest());

            Assert.IsTrue(result.IsSuccess());

            string nonce   = TestHelper.GenerateValidUsBankAccountNonce(gateway);
            var    request = new PaymentMethodRequest
            {
                CustomerId         = result.Target.Id,
                PaymentMethodNonce = nonce
            };
            Result <PaymentMethod> paymentMethodResult = gateway.PaymentMethod.Create(request);

            Assert.IsTrue(paymentMethodResult.IsSuccess());

            Assert.IsInstanceOf(typeof(UsBankAccount), paymentMethodResult.Target);
            UsBankAccount usBankAccount = (UsBankAccount)paymentMethodResult.Target;

            UsBankAccountGateway usBankAccountGateway = new UsBankAccountGateway(gateway);

            usBankAccount = usBankAccountGateway.Find(usBankAccount.Token);

            Assert.AreEqual("021000021", usBankAccount.RoutingNumber);
            Assert.AreEqual("1234", usBankAccount.Last4);
            Assert.AreEqual("checking", usBankAccount.AccountType);
            Assert.AreEqual("Dan Schulman", usBankAccount.AccountHolderName);
            Assert.IsTrue(Regex.IsMatch(usBankAccount.BankName, ".*CHASE.*"));
            AchMandate achMandate = usBankAccount.AchMandate;

            Assert.AreEqual("cl mandate text", achMandate.Text);
            Assert.AreEqual("DateTime", achMandate.AcceptedAt.GetType().Name);
            Assert.IsTrue(usBankAccount.IsDefault);
        }
        public void Find_FindsUsBankAccountWithToken()
        {
            Result <Customer> result = gateway.Customer.Create(new CustomerRequest());

            Assert.IsTrue(result.IsSuccess());

            string nonce   = TestHelper.GenerateValidUsBankAccountNonce(gateway);
            var    request = new PaymentMethodRequest
            {
                CustomerId         = result.Target.Id,
                PaymentMethodNonce = nonce
            };
            Result <PaymentMethod> paymentMethodResult = gateway.PaymentMethod.Create(request);

            Assert.IsTrue(paymentMethodResult.IsSuccess());

            Assert.IsInstanceOf(typeof(UsBankAccount), paymentMethodResult.Target);
            UsBankAccount usbankAccount = (UsBankAccount)paymentMethodResult.Target;

            UsBankAccountGateway usBankAccountGateway = new UsBankAccountGateway(gateway);

            usbankAccount = usBankAccountGateway.Find(usbankAccount.Token);

            Assert.AreEqual("123456789", usbankAccount.RoutingNumber);
            Assert.AreEqual("1234", usbankAccount.Last4);
            Assert.AreEqual("checking", usbankAccount.AccountType);
            Assert.AreEqual("PayPal Checking - 1234", usbankAccount.AccountDescription);
            Assert.AreEqual("Dan Schulman", usbankAccount.AccountHolderName);
        }
        public void Find_FindsUsBankAccountWithToken()
        {
            Result<Customer> result = gateway.Customer.Create(new CustomerRequest());
            Assert.IsTrue(result.IsSuccess());

            string nonce = TestHelper.GenerateValidUsBankAccountNonce(gateway);
            var request = new PaymentMethodRequest
            {
                CustomerId = result.Target.Id,
                PaymentMethodNonce = nonce
            };
            Result<PaymentMethod> paymentMethodResult = gateway.PaymentMethod.Create(request);
            Assert.IsTrue(paymentMethodResult.IsSuccess());

            Assert.IsInstanceOf(typeof(UsBankAccount), paymentMethodResult.Target);
            UsBankAccount usBankAccount = (UsBankAccount) paymentMethodResult.Target;

            UsBankAccountGateway usBankAccountGateway = new UsBankAccountGateway(gateway);
            usBankAccount = usBankAccountGateway.Find(usBankAccount.Token);

            Assert.AreEqual("021000021", usBankAccount.RoutingNumber);
            Assert.AreEqual("1234", usBankAccount.Last4);
            Assert.AreEqual("checking", usBankAccount.AccountType);
            Assert.AreEqual("PayPal Checking - 1234", usBankAccount.AccountDescription);
            Assert.AreEqual("Dan Schulman", usBankAccount.AccountHolderName);
            Assert.IsTrue(Regex.IsMatch(usBankAccount.BankName, ".*CHASE.*"));
        }
        public void Sale_TransactUsBankAccountWithToken()
        {
            Result <Customer> result = gateway.Customer.Create(new CustomerRequest());

            Assert.IsTrue(result.IsSuccess());

            string nonce   = TestHelper.GenerateValidUsBankAccountNonce(gateway);
            var    request = new PaymentMethodRequest
            {
                CustomerId         = result.Target.Id,
                PaymentMethodNonce = nonce,
                Options            = new PaymentMethodOptionsRequest {
                    VerificationMerchantAccountId = MerchantAccountIDs.US_BANK_MERCHANT_ACCOUNT_ID
                }
            };
            Result <PaymentMethod> paymentMethodResult = gateway.PaymentMethod.Create(request);

            Assert.IsTrue(paymentMethodResult.IsSuccess());

            Assert.IsInstanceOf(typeof(UsBankAccount), paymentMethodResult.Target);
            UsBankAccount usBankAccount = (UsBankAccount)paymentMethodResult.Target;

            Assert.IsTrue(usBankAccount.IsVerified);
            Assert.AreEqual(1, usBankAccount.Verifications.Count);

            var transactionRequest = new TransactionRequest
            {
                Amount            = SandboxValues.TransactionAmount.AUTHORIZE,
                MerchantAccountId = MerchantAccountIDs.US_BANK_MERCHANT_ACCOUNT_ID
            };

            UsBankAccountGateway usBankAccountGateway = new UsBankAccountGateway(gateway);
            Result <Transaction> transactionResult    = usBankAccountGateway.Sale(usBankAccount.Token, transactionRequest);

            Assert.IsTrue(transactionResult.IsSuccess());
            Transaction transaction = transactionResult.Target;

            Assert.AreEqual(TransactionStatus.SETTLEMENT_PENDING, transaction.Status);

            UsBankAccountDetails usBankAccountDetails = transaction.UsBankAccountDetails;

            Assert.AreEqual(usBankAccount.RoutingNumber, usBankAccountDetails.RoutingNumber);
            Assert.AreEqual(usBankAccount.Last4, usBankAccountDetails.Last4);
            Assert.AreEqual(usBankAccount.AccountType, usBankAccountDetails.AccountType);
            Assert.AreEqual(usBankAccount.AccountHolderName, usBankAccountDetails.AccountHolderName);
            AchMandate achMandate = usBankAccountDetails.AchMandate;

            Assert.AreEqual(usBankAccount.AchMandate.Text, achMandate.Text);
            Assert.AreEqual("DateTime", achMandate.AcceptedAt.GetType().Name);
        }
        public void CompliantMerchant_FailsToTransactUnverifiedToken()
        {
            gateway = new BraintreeGateway
            {
                Environment = Environment.DEVELOPMENT,
                MerchantId  = "integration2_merchant_id",
                PublicKey   = "integration2_public_key",
                PrivateKey  = "integration2_private_key"
            };

            Result <Customer> customerResult = gateway.Customer.Create(new CustomerRequest());

            Assert.IsTrue(customerResult.IsSuccess());

            string nonce   = TestHelper.GenerateValidUsBankAccountNonce(gateway);
            var    request = new PaymentMethodRequest
            {
                CustomerId         = customerResult.Target.Id,
                PaymentMethodNonce = nonce,
                Options            = new PaymentMethodOptionsRequest {
                    VerificationMerchantAccountId = "another_us_bank_merchant_account"
                }
            };
            Result <PaymentMethod> paymentMethodResult = gateway.PaymentMethod.Create(request);

            Assert.IsTrue(paymentMethodResult.IsSuccess());

            Assert.IsInstanceOf(typeof(UsBankAccount), paymentMethodResult.Target);
            UsBankAccount usBankAccount = (UsBankAccount)paymentMethodResult.Target;

            Assert.IsFalse(usBankAccount.IsVerified);
            Assert.AreEqual(0, usBankAccount.Verifications.Count);

            var transactionRequest = new TransactionRequest
            {
                Amount            = SandboxValues.TransactionAmount.AUTHORIZE,
                MerchantAccountId = "another_us_bank_merchant_account"
            };

            UsBankAccountGateway usBankAccountGateway = new UsBankAccountGateway(gateway);
            Result <Transaction> transactionResult    = usBankAccountGateway.Sale(usBankAccount.Token, transactionRequest);

            Assert.IsFalse(transactionResult.IsSuccess());
            Assert.AreEqual(
                ValidationErrorCode.TRANSACTION_US_BANK_ACCOUNT_MUST_BE_VERIFIED,
                transactionResult.Errors.ForObject("transaction").OnField("payment-method-token")[0].Code);
        }
        public void Sale_TransactUsBankAccountWithToken()
        {
            Result<Customer> result = gateway.Customer.Create(new CustomerRequest());
            Assert.IsTrue(result.IsSuccess());

            string nonce = TestHelper.GenerateValidUsBankAccountNonce(gateway);
            var request = new PaymentMethodRequest
            {
                CustomerId = result.Target.Id,
                PaymentMethodNonce = nonce
            };
            Result<PaymentMethod> paymentMethodResult = gateway.PaymentMethod.Create(request);
            Assert.IsTrue(paymentMethodResult.IsSuccess());

            Assert.IsInstanceOf(typeof(UsBankAccount), paymentMethodResult.Target);
            UsBankAccount usBankAccount = (UsBankAccount) paymentMethodResult.Target;

            var transactionRequest = new TransactionRequest
            {
                Amount = SandboxValues.TransactionAmount.AUTHORIZE,
                MerchantAccountId = MerchantAccountIDs.US_BANK_MERCHANT_ACCOUNT_ID
            };

            UsBankAccountGateway usBankAccountGateway = new UsBankAccountGateway(gateway);
            Result<Transaction> transactionResult = usBankAccountGateway.Sale(usBankAccount.Token, transactionRequest);

            Assert.IsTrue(transactionResult.IsSuccess());
            Transaction transaction = transactionResult.Target;
            Assert.AreEqual(TransactionStatus.SETTLEMENT_PENDING, transaction.Status);

            UsBankAccountDetails usBankAccountDetails = transaction.UsBankAccountDetails;
            Assert.AreEqual(usBankAccount.RoutingNumber, usBankAccountDetails.RoutingNumber);
            Assert.AreEqual(usBankAccount.Last4, usBankAccountDetails.Last4);
            Assert.AreEqual(usBankAccount.AccountType, usBankAccountDetails.AccountType);
            Assert.AreEqual(usBankAccount.AccountDescription, usBankAccountDetails.AccountDescription);
            Assert.AreEqual(usBankAccount.AccountHolderName, usBankAccountDetails.AccountHolderName);
        }
 public void Find_RaisesNotFoundErrorWhenTokenDoesntExist()
 {
     UsBankAccountGateway usBankAccountGateway = new UsBankAccountGateway(gateway);
     string nonce = TestHelper.GenerateInvalidUsBankAccountNonce();
     Assert.Throws<NotFoundException>(() => usBankAccountGateway.Find(nonce));
 }