Preview: CustomerTest.php
Size: 62.86 KB
/home/godevadmin/www/admin/braintree/final/braintree/tests/integration/CustomerTest.php
<?php
namespace Test\Integration;
require_once dirname(__DIR__) . '/Setup.php';
use Test;
use Test\Setup;
use Braintree;
class CustomerTest extends Setup
{
public function testAll_smokeTest()
{
$all = Braintree\Customer::all();
$this->assertTrue($all->maximumCount() > 0);
}
public function testAllWithManyResults()
{
$collection = Braintree\Customer::all();
$this->assertTrue($collection->maximumCount() > 1);
$customer = $collection->firstItem();
$this->assertTrue(strlen($customer->id) > 0);
$this->assertTrue($customer instanceof Braintree\Customer);
}
public function testCreate()
{
$result = Braintree\Customer::create([
'firstName' => 'Mike',
'lastName' => 'Jones',
'company' => 'Jones Co.',
'email' => '[email protected]',
'phone' => '419.555.1234',
'fax' => '419.555.1235',
'website' => 'http://example.com'
]);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$this->assertEquals('Mike', $customer->firstName);
$this->assertEquals('Jones', $customer->lastName);
$this->assertEquals('Jones Co.', $customer->company);
$this->assertEquals('[email protected]', $customer->email);
$this->assertEquals('419.555.1234', $customer->phone);
$this->assertEquals('419.555.1235', $customer->fax);
$this->assertEquals('http://example.com', $customer->website);
$this->assertNotNull($customer->merchantId);
}
public function testCreateWithIdOfZero()
{
$result = Braintree\Customer::create([
'id' => '0'
]);
$this->assertEquals(true, $result->success);
$this->assertEquals($result->customer->id, '0');
$customer = Braintree\Customer::find('0');
$this->assertEquals('0', $customer->id);
Braintree\Customer::delete('0');
}
public function testGatewayCreate()
{
$gateway = new Braintree\Gateway([
'environment' => 'development',
'merchantId' => 'integration_merchant_id',
'publicKey' => 'integration_public_key',
'privateKey' => 'integration_private_key'
]);
$result = $gateway->customer()->create([
'firstName' => 'Mike',
'lastName' => 'Jones',
]);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$this->assertEquals('Mike', $customer->firstName);
$this->assertEquals('Jones', $customer->lastName);
$this->assertNotNull($customer->merchantId);
}
public function testCreateWithAccessToken()
{
$credentials = Test\Braintree\OAuthTestHelper::createCredentials([
'clientId' => 'client_id$development$integration_client_id',
'clientSecret' => 'client_secret$development$integration_client_secret',
'merchantId' => 'integration_merchant_id',
]);
$gateway = new Braintree\Gateway([
'accessToken' => $credentials->accessToken,
]);
$result = $gateway->customer()->create([
'firstName' => 'Mike',
'lastName' => 'Jones',
]);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$this->assertEquals('Mike', $customer->firstName);
$this->assertEquals('Jones', $customer->lastName);
$this->assertNotNull($customer->merchantId);
}
public function testCreateCustomerWithCardUsingNonce()
{
$http = new HttpClientApi(Braintree\Configuration::$global);
$nonce = $http->nonce_for_new_card([
"creditCard" => [
"number" => "4111111111111111",
"expirationMonth" => "11",
"expirationYear" => "2099"
],
"share" => true
]);
$result = Braintree\Customer::create([
'creditCard' => [
'paymentMethodNonce' => $nonce
]
]);
$this->assertTrue($result->success);
$this->assertSame("411111", $result->customer->creditCards[0]->bin);
$this->assertSame("1111", $result->customer->creditCards[0]->last4);
}
public function testCreateCustomerWithApplePayCard()
{
$nonce = Braintree\Test\Nonces::$applePayVisa;
$result = Braintree\Customer::create([
'paymentMethodNonce' => $nonce
]);
$this->assertTrue($result->success);
$customer = $result->customer;
$this->assertNotNull($customer->applePayCards[0]);
$this->assertNotNull($customer->paymentMethods[0]);
}
public function testCreateCustomerWithAndroidPayProxyCard()
{
$nonce = Braintree\Test\Nonces::$androidPayDiscover;
$result = Braintree\Customer::create([
'paymentMethodNonce' => $nonce
]);
$this->assertTrue($result->success);
$customer = $result->customer;
$this->assertNotNull($customer->androidPayCards[0]);
$this->assertNotNull($customer->paymentMethods[0]);
$androidPayCard = $customer->androidPayCards[0];
$this->assertTrue($androidPayCard instanceof Braintree\AndroidPayCard);
$this->assertNotNull($androidPayCard->token);
$this->assertNotNull($androidPayCard->expirationYear);
}
public function testCreateCustomerWithAndroidPayNetworkToken()
{
$nonce = Braintree\Test\Nonces::$androidPayMasterCard;
$result = Braintree\Customer::create([
'paymentMethodNonce' => $nonce
]);
$this->assertTrue($result->success);
$customer = $result->customer;
$this->assertNotNull($customer->androidPayCards[0]);
$this->assertNotNull($customer->paymentMethods[0]);
$androidPayCard = $customer->androidPayCards[0];
$this->assertTrue($androidPayCard instanceof Braintree\AndroidPayCard);
$this->assertNotNull($androidPayCard->token);
$this->assertNotNull($androidPayCard->expirationYear);
}
public function testCreateCustomerWithAmexExpressCheckoutCard()
{
$nonce = Braintree\Test\Nonces::$amexExpressCheckout;
$result = Braintree\Customer::create([
'paymentMethodNonce' => $nonce
]);
$this->assertTrue($result->success);
$customer = $result->customer;
$this->assertNotNull($customer->amexExpressCheckoutCards[0]);
$this->assertNotNull($customer->paymentMethods[0]);
$amexExpressCheckoutCard = $customer->amexExpressCheckoutCards[0];
$this->assertTrue($amexExpressCheckoutCard instanceof Braintree\AmexExpressCheckoutCard);
$this->assertNotNull($amexExpressCheckoutCard->token);
$this->assertNotNull($amexExpressCheckoutCard->expirationYear);
}
public function testCreateCustomerWithVenmoAccount()
{
$nonce = Braintree\Test\Nonces::$venmoAccount;
$result = Braintree\Customer::create(array(
'paymentMethodNonce' => $nonce
));
$this->assertTrue($result->success);
$customer = $result->customer;
$this->assertNotNull($customer->venmoAccounts[0]);
$this->assertNotNull($customer->paymentMethods[0]);
$venmoAccount = $customer->venmoAccounts[0];
$this->assertTrue($venmoAccount instanceof Braintree\VenmoAccount);
$this->assertNotNull($venmoAccount->token);
$this->assertNotNull($venmoAccount->username);
$this->assertNotNull($venmoAccount->venmoUserId);
}
public function testCreateCustomerWithCoinbase()
{
$nonce = Braintree\Test\Nonces::$coinbase;
$result = Braintree\Customer::create([
'paymentMethodNonce' => $nonce
]);
$this->assertTrue($result->success);
$customer = $result->customer;
$this->assertNotNull($customer->coinbaseAccounts[0]);
$this->assertNotNull($customer->coinbaseAccounts[0]->userId);
$this->assertNotNull($customer->coinbaseAccounts[0]->userName);
$this->assertNotNull($customer->coinbaseAccounts[0]->userEmail);
$this->assertNotNull($customer->paymentMethods[0]);
}
public function testCreateCustomerWithUsBankAccount()
{
$nonce = Test\Helper::generateValidUsBankAccountNonce();
$result = Braintree\Customer::create(array(
'paymentMethodNonce' => $nonce
));
$this->assertTrue($result->success);
$customer = $result->customer;
$this->assertNotNull($customer->usBankAccounts[0]);
$this->assertNotNull($customer->paymentMethods[0]);
$usBankAccount = $customer->usBankAccounts[0];
$this->assertTrue($usBankAccount instanceof Braintree\UsBankAccount);
$this->assertNotNull($usBankAccount->token);
$this->assertEquals('Dan Schulman', $usBankAccount->accountHolderName);
$this->assertEquals('021000021', $usBankAccount->routingNumber);
$this->assertEquals('1234', $usBankAccount->last4);
$this->assertEquals('checking', $usBankAccount->accountType);
$this->assertRegexp('/CHASE/', $usBankAccount->bankName);
}
public function testCreate_withUnicode()
{
$result = Braintree\Customer::create([
'firstName' => "Здравствуйте",
'lastName' => 'Jones',
'company' => 'Jones Co.',
'email' => '[email protected]',
'phone' => '419.555.1234',
'fax' => '419.555.1235',
'website' => 'http://example.com'
]);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$this->assertEquals("Здравствуйте", $customer->firstName);
$this->assertEquals('Jones', $customer->lastName);
$this->assertEquals('Jones Co.', $customer->company);
$this->assertEquals('[email protected]', $customer->email);
$this->assertEquals('419.555.1234', $customer->phone);
$this->assertEquals('419.555.1235', $customer->fax);
$this->assertEquals('http://example.com', $customer->website);
$this->assertNotNull($customer->merchantId);
}
public function testCreate_withCountry()
{
$result = Braintree\Customer::create([
'firstName' => 'Bat',
'lastName' => 'Manderson',
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'billingAddress' => [
'countryName' => 'Gabon',
'countryCodeAlpha2' => 'GA',
'countryCodeAlpha3' => 'GAB',
'countryCodeNumeric' => '266'
]
]
]);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$this->assertEquals('Gabon', $customer->creditCards[0]->billingAddress->countryName);
$this->assertEquals('GA', $customer->creditCards[0]->billingAddress->countryCodeAlpha2);
$this->assertEquals('GAB', $customer->creditCards[0]->billingAddress->countryCodeAlpha3);
$this->assertEquals('266', $customer->creditCards[0]->billingAddress->countryCodeNumeric);
$this->assertEquals(1, preg_match('/\A\w{32}\z/', $customer->creditCards[0]->uniqueNumberIdentifier));
}
public function testCreate_withVenmoSdkSession()
{
$result = Braintree\Customer::create([
'firstName' => 'Bat',
'lastName' => 'Manderson',
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'options' => [
'venmoSdkSession' => Braintree\Test\VenmoSdk::getTestSession()
]
]
]);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$this->assertEquals(true, $customer->creditCards[0]->venmoSdk);
}
public function testCreate_withVenmoSdkPaymentMethodCode()
{
$result = Braintree\Customer::create([
'firstName' => 'Bat',
'lastName' => 'Manderson',
'creditCard' => [
'venmoSdkPaymentMethodCode' => Braintree\Test\VenmoSdk::$visaPaymentMethodCode
],
]);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$this->assertEquals("411111", $customer->creditCards[0]->bin);
}
public function testCreate_blankCustomer()
{
$result = Braintree\Customer::create();
$this->assertEquals(true, $result->success);
$this->assertNotNull($result->customer->id);
$result = Braintree\Customer::create([]);
$this->assertEquals(true, $result->success);
$this->assertNotNull($result->customer->id);
}
public function testCreate_withSpecialChars()
{
$result = Braintree\Customer::create(['firstName' => '<>&"\'']);
$this->assertEquals(true, $result->success);
$this->assertEquals('<>&"\'', $result->customer->firstName);
}
public function testCreate_withCustomFields()
{
$result = Braintree\Customer::create([
'firstName' => 'Mike',
'customFields' => [
'store_me' => 'some custom value'
]
]);
$this->assertEquals(true, $result->success);
$customFields = $result->customer->customFields;
$this->assertEquals('some custom value', $customFields['store_me']);
}
public function testCreate_withFraudParams()
{
$result = Braintree\Customer::create([
'firstName' => 'Mike',
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'cvv' => '123',
'cardholderName' => 'Mike Jones',
'deviceSessionId' => 'abc123',
'fraudMerchantId' => '456'
]
]);
$this->assertEquals(true, $result->success);
}
public function testCreate_withRiskData()
{
$result = Braintree\Customer::create([
'firstName' => 'Mike',
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'cvv' => '123',
'cardholderName' => 'Mike Jones',
],
'riskData' => [
'customer_browser' => 'IE5',
'customer_ip' => '192.168.0.1'
]
]);
$this->assertEquals(true, $result->success);
}
public function testCreate_withCreditCard()
{
$result = Braintree\Customer::create([
'firstName' => 'Mike',
'lastName' => 'Jones',
'company' => 'Jones Co.',
'email' => '[email protected]',
'phone' => '419.555.1234',
'fax' => '419.555.1235',
'website' => 'http://example.com',
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'cvv' => '123',
'cardholderName' => 'Mike Jones'
]
]);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$this->assertEquals('Mike', $customer->firstName);
$this->assertEquals('Jones', $customer->lastName);
$this->assertEquals('Jones Co.', $customer->company);
$this->assertEquals('[email protected]', $customer->email);
$this->assertEquals('419.555.1234', $customer->phone);
$this->assertEquals('419.555.1235', $customer->fax);
$this->assertEquals('http://example.com', $customer->website);
$creditCard = $customer->creditCards[0];
$this->assertEquals('510510', $creditCard->bin);
$this->assertEquals('5100', $creditCard->last4);
$this->assertEquals('Mike Jones', $creditCard->cardholderName);
$this->assertEquals('05/2012', $creditCard->expirationDate);
$this->assertEquals('05', $creditCard->expirationMonth);
$this->assertEquals('2012', $creditCard->expirationYear);
}
public function testCreate_withDuplicateCardCheck()
{
$customer = Braintree\Customer::createNoValidate();
$attributes = [
'firstName' => 'Mike',
'lastName' => 'Jones',
'company' => 'Jones Co.',
'email' => '[email protected]',
'phone' => '419.555.1234',
'fax' => '419.555.1235',
'website' => 'http://example.com',
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'cvv' => '123',
'cardholderName' => 'Mike Jones',
'options' => [
'failOnDuplicatePaymentMethod' => true
]
]
];
Braintree\Customer::create($attributes);
$result = Braintree\Customer::create($attributes);
$this->assertFalse($result->success);
$errors = $result->errors->forKey('customer')->forKey('creditCard')->onAttribute('number');
$this->assertEquals(Braintree\Error\Codes::CREDIT_CARD_DUPLICATE_CARD_EXISTS, $errors[0]->code);
$this->assertEquals(1, preg_match('/Duplicate card exists in the vault\./', $result->message));
}
public function testCreate_withCreditCardAndSpecificVerificationMerchantAccount()
{
$result = Braintree\Customer::create([
'firstName' => 'Mike',
'lastName' => 'Jones',
'company' => 'Jones Co.',
'email' => '[email protected]',
'phone' => '419.555.1234',
'fax' => '419.555.1235',
'website' => 'http://example.com',
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'cvv' => '123',
'cardholderName' => 'Mike Jones',
'options' => [
'verificationMerchantAccountId' => Test\Helper::nonDefaultMerchantAccountId(),
'verifyCard' => true
]
]
]);
Test\Helper::assertPrintable($result);
$this->assertFalse($result->success);
$this->assertEquals(Braintree\Result\CreditCardVerification::PROCESSOR_DECLINED, $result->creditCardVerification->status);
$this->assertEquals('2000', $result->creditCardVerification->processorResponseCode);
$this->assertEquals('Do Not Honor', $result->creditCardVerification->processorResponseText);
$this->assertEquals('M', $result->creditCardVerification->cvvResponseCode);
$this->assertEquals(null, $result->creditCardVerification->avsErrorResponseCode);
$this->assertEquals('I', $result->creditCardVerification->avsPostalCodeResponseCode);
$this->assertEquals('I', $result->creditCardVerification->avsStreetAddressResponseCode);
}
public function testCreate_withCreditCardAndVerificationAmount()
{
$result = Braintree\Customer::create([
'firstName' => 'Mike',
'lastName' => 'Jones',
'company' => 'Jones Co.',
'email' => '[email protected]',
'phone' => '419.555.1234',
'fax' => '419.555.1235',
'website' => 'http://example.com',
'creditCard' => [
'number' => '5555555555554444',
'expirationDate' => '05/12',
'cvv' => '123',
'cardholderName' => 'Mike Jones',
'options' => [
'verifyCard' => true,
'verificationAmount' => '2.00'
]
]
]);
$this->assertTrue($result->success);
}
public function testCreate_withCreditCardAndBillingAddress()
{
$result = Braintree\Customer::create([
'firstName' => 'Mike',
'lastName' => 'Jones',
'company' => 'Jones Co.',
'email' => '[email protected]',
'phone' => '419.555.1234',
'fax' => '419.555.1235',
'website' => 'http://example.com',
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'cvv' => '123',
'cardholderName' => 'Mike Jones',
'billingAddress' => [
'firstName' => 'Drew',
'lastName' => 'Smith',
'company' => 'Smith Co.',
'streetAddress' => '1 E Main St',
'extendedAddress' => 'Suite 101',
'locality' => 'Chicago',
'region' => 'IL',
'postalCode' => '60622',
'countryName' => 'United States of America'
]
]
]);
Test\Helper::assertPrintable($result);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$this->assertEquals('Mike', $customer->firstName);
$this->assertEquals('Jones', $customer->lastName);
$this->assertEquals('Jones Co.', $customer->company);
$this->assertEquals('[email protected]', $customer->email);
$this->assertEquals('419.555.1234', $customer->phone);
$this->assertEquals('419.555.1235', $customer->fax);
$this->assertEquals('http://example.com', $customer->website);
$creditCard = $customer->creditCards[0];
$this->assertEquals('510510', $creditCard->bin);
$this->assertEquals('5100', $creditCard->last4);
$this->assertEquals('Mike Jones', $creditCard->cardholderName);
$this->assertEquals('05/2012', $creditCard->expirationDate);
$this->assertEquals('05', $creditCard->expirationMonth);
$this->assertEquals('2012', $creditCard->expirationYear);
$address = $customer->addresses[0];
$this->assertEquals($address, $creditCard->billingAddress);
$this->assertEquals('Drew', $address->firstName);
$this->assertEquals('Smith', $address->lastName);
$this->assertEquals('Smith Co.', $address->company);
$this->assertEquals('1 E Main St', $address->streetAddress);
$this->assertEquals('Suite 101', $address->extendedAddress);
$this->assertEquals('Chicago', $address->locality);
$this->assertEquals('IL', $address->region);
$this->assertEquals('60622', $address->postalCode);
$this->assertEquals('United States of America', $address->countryName);
}
public function testCreate_withValidationErrors()
{
$result = Braintree\Customer::create([
'email' => 'invalid',
'creditCard' => [
'number' => 'invalid',
'billingAddress' => [
'streetAddress' => str_repeat('x', 256)
]
]
]);
Test\Helper::assertPrintable($result);
$this->assertEquals(false, $result->success);
$errors = $result->errors->forKey('customer')->onAttribute('email');
$this->assertEquals(Braintree\Error\Codes::CUSTOMER_EMAIL_IS_INVALID, $errors[0]->code);
$errors = $result->errors->forKey('customer')->forKey('creditCard')->onAttribute('number');
$this->assertEquals(Braintree\Error\Codes::CREDIT_CARD_NUMBER_INVALID_LENGTH, $errors[0]->code);
$errors = $result->errors->forKey('customer')->forKey('creditCard')->forKey('billingAddress')->onAttribute('streetAddress');
$this->assertEquals(Braintree\Error\Codes::ADDRESS_STREET_ADDRESS_IS_TOO_LONG, $errors[0]->code);
}
public function testCreate_countryValidations_inconsistency()
{
$result = Braintree\Customer::create([
'creditCard' => [
'billingAddress' => [
'countryName' => 'Georgia',
'countryCodeAlpha2' => 'TF'
]
]
]);
$this->assertEquals(false, $result->success);
$errors = $result->errors->forKey('customer')->forKey('creditCard')->forKey('billingAddress')->onAttribute('base');
$this->assertEquals(Braintree\Error\Codes::ADDRESS_INCONSISTENT_COUNTRY, $errors[0]->code);
}
public function testCreateNoValidate_returnsCustomer()
{
$customer = Braintree\Customer::createNoValidate([
'firstName' => 'Paul',
'lastName' => 'Martin'
]);
$this->assertEquals('Paul', $customer->firstName);
$this->assertEquals('Martin', $customer->lastName);
}
public function testCreateNoValidate_throwsIfInvalid()
{
$this->setExpectedException('Braintree\Exception\ValidationsFailed');
$customer = Braintree\Customer::createNoValidate(['email' => 'invalid']);
}
public function testCreate_worksWithFuturePayPalNonce()
{
$nonce = Braintree\Test\Nonces::$paypalFuturePayment;
$result = Braintree\Customer::create([
'paymentMethodNonce' => $nonce
]);
$this->assertTrue($result->success);
}
public function testCreate_worksWithOrderPaymentPayPalNonce()
{
$http = new HttpClientApi(Braintree\Configuration::$global);
$nonce = $http->nonceForPayPalAccount([
'paypal_account' => [
'intent' => 'order',
'payment_token' => 'paypal-payment-token',
'payer_id' => 'paypal-payer-id',
]
]);
$result = Braintree\Customer::create([
'paymentMethodNonce' => $nonce
]);
$this->assertTrue($result->success);
}
public function testCreate_worksWithOrderPaymentPayPalNonceWithPayeeEmail()
{
$http = new HttpClientApi(Braintree\Configuration::$global);
$nonce = $http->nonceForPayPalAccount([
'paypal_account' => [
'intent' => 'order',
'payment_token' => 'paypal-payment-token',
'payer_id' => 'paypal-payer-id',
]
]);
$result = Braintree\Customer::create([
'paymentMethodNonce' => $nonce,
'options' => [
'paypal' => [
'payee_email' => '[email protected]',
'order_id' => 'merchant-order-id',
'custom_field' => 'custom merchant field',
'description' => 'merchant description',
'amount' => '1.23',
],
],
]);
$this->assertTrue($result->success);
}
public function testCreate_doesNotWorkWithOnetimePayPalNonce()
{
$nonce = Braintree\Test\Nonces::$paypalOneTimePayment;
$result = Braintree\Customer::create([
'paymentMethodNonce' => $nonce
]);
$this->assertFalse($result->success);
$errors = $result->errors->forKey('customer')->forKey('paypalAccount')->errors;
$this->assertEquals(Braintree\Error\Codes::PAYPAL_ACCOUNT_CANNOT_VAULT_ONE_TIME_USE_PAYPAL_ACCOUNT, $errors[0]->code);
}
public function testDelete_deletesTheCustomer()
{
$result = Braintree\Customer::create([]);
$this->assertEquals(true, $result->success);
Braintree\Customer::find($result->customer->id);
Braintree\Customer::delete($result->customer->id);
$this->setExpectedException('Braintree\Exception\NotFound');
Braintree\Customer::find($result->customer->id);
}
public function testFind()
{
$result = Braintree\Customer::create([
'firstName' => 'Mike',
'lastName' => 'Jones',
'company' => 'Jones Co.',
'email' => '[email protected]',
'phone' => '419.555.1234',
'fax' => '419.555.1235',
'website' => 'http://example.com'
]);
$this->assertEquals(true, $result->success);
$customer = Braintree\Customer::find($result->customer->id);
$this->assertEquals('Mike', $customer->firstName);
$this->assertEquals('Jones', $customer->lastName);
$this->assertEquals('Jones Co.', $customer->company);
$this->assertEquals('[email protected]', $customer->email);
$this->assertEquals('419.555.1234', $customer->phone);
$this->assertEquals('419.555.1235', $customer->fax);
$this->assertEquals('http://example.com', $customer->website);
}
public function test_findUsBankAccountGivenPaymentMethodToken()
{
$nonce = Test\Helper::generateValidUsBankAccountNonce();
$result = Braintree\Customer::create(array(
'paymentMethodNonce' => $nonce
));
$this->assertTrue($result->success);
$customer = Braintree\Customer::find($result->customer->id);
$this->assertNotNull($customer->usBankAccounts[0]);
$this->assertNotNull($customer->paymentMethods[0]);
$usBankAccount = $customer->usBankAccounts[0];
$this->assertTrue($usBankAccount instanceof Braintree\UsBankAccount);
$this->assertNotNull($usBankAccount->token);
$this->assertEquals('Dan Schulman', $usBankAccount->accountHolderName);
$this->assertEquals('021000021', $usBankAccount->routingNumber);
$this->assertEquals('1234', $usBankAccount->last4);
$this->assertEquals('checking', $usBankAccount->accountType);
$this->assertRegexp('/CHASE/', $usBankAccount->bankName);
}
public function testFind_throwsExceptionIfNotFound()
{
$this->setExpectedException('Braintree\Exception\NotFound');
Braintree\Customer::find("does-not-exist");
}
public function testUpdate()
{
$result = Braintree\Customer::create([
'firstName' => 'Old First',
'lastName' => 'Old Last',
'company' => 'Old Company',
'email' => '[email protected]',
'phone' => 'old phone',
'fax' => 'old fax',
'website' => 'http://old.example.com'
]);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$updateResult = Braintree\Customer::update($customer->id, [
'firstName' => 'New First',
'lastName' => 'New Last',
'company' => 'New Company',
'email' => '[email protected]',
'phone' => 'new phone',
'fax' => 'new fax',
'website' => 'http://new.example.com'
]);
$this->assertEquals(true, $updateResult->success);
$this->assertEquals('New First', $updateResult->customer->firstName);
$this->assertEquals('New Last', $updateResult->customer->lastName);
$this->assertEquals('New Company', $updateResult->customer->company);
$this->assertEquals('[email protected]', $updateResult->customer->email);
$this->assertEquals('new phone', $updateResult->customer->phone);
$this->assertEquals('new fax', $updateResult->customer->fax);
$this->assertEquals('http://new.example.com', $updateResult->customer->website);
}
public function testUpdate_withCountry()
{
$customer = Braintree\Customer::create([
'firstName' => 'Bat',
'lastName' => 'Manderson',
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'billingAddress' => [
'countryName' => 'United States of America',
'countryCodeAlpha2' => 'US',
'countryCodeAlpha3' => 'USA',
'countryCodeNumeric' => '840'
]
]
])->customer;
$result = Braintree\Customer::update($customer->id, [
'firstName' => 'Bat',
'lastName' => 'Manderson',
'creditCard' => [
'options' => [
'updateExistingToken' => $customer->creditCards[0]->token
],
'billingAddress' => [
'countryName' => 'Gabon',
'countryCodeAlpha2' => 'GA',
'countryCodeAlpha3' => 'GAB',
'countryCodeNumeric' => '266',
'options' => [
'updateExisting' => true
]
]
]
]);
$this->assertEquals(true, $result->success);
$updatedCustomer = $result->customer;
$this->assertEquals('Gabon', $updatedCustomer->creditCards[0]->billingAddress->countryName);
$this->assertEquals('GA', $updatedCustomer->creditCards[0]->billingAddress->countryCodeAlpha2);
$this->assertEquals('GAB', $updatedCustomer->creditCards[0]->billingAddress->countryCodeAlpha3);
$this->assertEquals('266', $updatedCustomer->creditCards[0]->billingAddress->countryCodeNumeric);
}
public function testUpdate_withUpdatingExistingCreditCard()
{
$create_result = Braintree\Customer::create([
'firstName' => 'Old First',
'lastName' => 'Old Last',
'website' => 'http://old.example.com',
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'cardholderName' => 'Old Cardholder'
]
]);
$this->assertEquals(true, $create_result->success);
$customer = $create_result->customer;
$creditCard = $customer->creditCards[0];
$result = Braintree\Customer::update($customer->id, [
'firstName' => 'New First',
'lastName' => 'New Last',
'creditCard' => [
'number' => '4111111111111111',
'expirationDate' => '11/14',
'cardholderName' => 'New Cardholder',
'options' => [
'updateExistingToken' => $creditCard->token
]
]
]);
$this->assertEquals(true, $result->success);
$this->assertEquals('New First', $result->customer->firstName);
$this->assertEquals('New Last', $result->customer->lastName);
$this->assertEquals(1, sizeof($result->customer->creditCards));
$creditCard = $result->customer->creditCards[0];
$this->assertEquals('411111', $creditCard->bin);
$this->assertEquals('11/2014', $creditCard->expirationDate);
$this->assertEquals('New Cardholder', $creditCard->cardholderName);
}
public function testUpdate_failOnDuplicatePaymentMethod()
{
$create_result = Braintree\Customer::create([
'creditCard' => [
'number' => '4111111111111111',
'expirationDate' => '11/14',
]
]);
$this->assertEquals(true, $create_result->success);
$result = Braintree\Customer::update($create_result->customer->id, [
'creditCard' => [
'number' => '4111111111111111',
'expirationDate' => '11/14',
'options' => [
'failOnDuplicatePaymentMethod' => true
]
]
]);
$this->assertFalse($result->success);
$errors = $result->errors->forKey('customer')->forKey('creditCard')->onAttribute('number');
$this->assertEquals(Braintree\Error\Codes::CREDIT_CARD_DUPLICATE_CARD_EXISTS, $errors[0]->code);
$this->assertEquals(1, preg_match('/Duplicate card exists in the vault\./', $result->message));
}
public function testUpdate_forBillingAddressAndExistingCreditCardAndCustomerDetailsTogether()
{
$create_result = Braintree\Customer::create([
'firstName' => 'Old First',
'lastName' => 'Old Last',
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'cvv' => '123',
'cardholderName' => 'Old Cardholder',
'billingAddress' => [
'firstName' => 'Drew',
'lastName' => 'Smith'
]
]
]);
$this->assertEquals(true, $create_result->success);
$customer = $create_result->customer;
$creditCard = $customer->creditCards[0];
$result = Braintree\Customer::update($customer->id, [
'firstName' => 'New Customer First',
'lastName' => 'New Customer Last',
'creditCard' => [
'number' => '4111111111111111',
'expirationDate' => '11/14',
'options' => [
'updateExistingToken' => $creditCard->token
],
'billingAddress' => [
'firstName' => 'New Billing First',
'lastName' => 'New Billing Last',
'options' => [
'updateExisting' => true
]
]
]
]);
$this->assertEquals(true, $result->success);
$this->assertEquals('New Customer First', $result->customer->firstName);
$this->assertEquals('New Customer Last', $result->customer->lastName);
$this->assertEquals(1, sizeof($result->customer->creditCards));
$this->assertEquals(1, sizeof($result->customer->addresses));
$creditCard = $result->customer->creditCards[0];
$this->assertEquals('411111', $creditCard->bin);
$this->assertEquals('11/2014', $creditCard->expirationDate);
$billingAddress = $creditCard->billingAddress;
$this->assertEquals('New Billing First', $billingAddress->firstName);
$this->assertEquals('New Billing Last', $billingAddress->lastName);
}
public function testUpdate_withNewCreditCardAndExistingBillingAddress()
{
$customer = Braintree\Customer::create()->customer;
$address = Braintree\Address::create([
'customerId' => $customer->id,
'firstName' => 'Dan'
])->address;
$result = Braintree\Customer::update($customer->id, [
'creditCard' => [
'number' => '4111111111111111',
'expirationDate' => '11/14',
'billingAddressId' => $address->id
]
]);
$billingAddress = $result->customer->creditCards[0]->billingAddress;
$this->assertEquals($address->id, $billingAddress->id);
$this->assertEquals('Dan', $billingAddress->firstName);
}
public function testUpdate_withNewCreditCardAndVerificationAmount()
{
$customer = Braintree\Customer::create()->customer;
$result = Braintree\Customer::update($customer->id, [
'creditCard' => [
'number' => '4111111111111111',
'expirationDate' => '11/14',
'options' => [
'verifyCard' => true,
'verificationAmount' => '2.00'
]
]
]);
$this->assertTrue($result->success);
}
public function testUpdate_worksWithFuturePayPalNonce()
{
$customerResult = Braintree\Customer::create([
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'options' => [
'makeDefault' => true
]
]
]);
$paypalAccountToken = 'PAYPALToken-' . strval(rand());
$http = new HttpClientApi(Braintree\Configuration::$global);
$nonce = $http->nonceForPayPalAccount([
'paypal_account' => [
'consent_code' => 'PAYPAL_CONSENT_CODE',
'token' => $paypalAccountToken,
'options' => [
'makeDefault' => true
]
]
]);
$result = Braintree\Customer::update($customerResult->customer->id, [
'paymentMethodNonce' => $nonce
]);
$this->assertTrue($result->success);
$this->assertEquals($result->customer->defaultPaymentMethod()->token, $paypalAccountToken);
}
public function testUpdate_worksWithOrderPaymentPayPalNonce()
{
$customerResult = Braintree\Customer::create([
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'options' => [
'makeDefault' => true
]
]
]);
$paypalAccountToken = 'PAYPALToken-' . strval(rand());
$http = new HttpClientApi(Braintree\Configuration::$global);
$nonce = $http->nonceForPayPalAccount([
'paypal_account' => [
'intent' => 'order',
'payment_token' => 'paypal-payment-token',
'payer_id' => 'paypal-payer-id',
'token' => $paypalAccountToken,
'options' => [
'makeDefault' => true
]
]
]);
$result = Braintree\Customer::update($customerResult->customer->id, [
'paymentMethodNonce' => $nonce
]);
$this->assertTrue($result->success);
$this->assertEquals($result->customer->defaultPaymentMethod()->token, $paypalAccountToken);
}
public function testUpdate_worksWithOrderPaymentPayPalNonceWithPayeeEmail()
{
$customerResult = Braintree\Customer::create([
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'options' => [
'makeDefault' => true
]
]
]);
$paypalAccountToken = 'PAYPALToken-' . strval(rand());
$http = new HttpClientApi(Braintree\Configuration::$global);
$nonce = $http->nonceForPayPalAccount([
'paypal_account' => [
'intent' => 'order',
'payment_token' => 'paypal-payment-token',
'payer_id' => 'paypal-payer-id',
'token' => $paypalAccountToken,
'options' => [
'makeDefault' => true
]
]
]);
$result = Braintree\Customer::update($customerResult->customer->id, [
'paymentMethodNonce' => $nonce,
'options' => [
'paypal' => [
'payee_email' => '[email protected]',
],
],
]);
$this->assertTrue($result->success);
$this->assertEquals($result->customer->defaultPaymentMethod()->token, $paypalAccountToken);
}
public function testUpdateDefaultPaymentMethod()
{
$result = Braintree\Customer::create([
'firstName' => 'Old First',
'lastName' => 'Old Last',
]);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$token1 = 'TOKEN-' . strval(rand());
$result = Braintree\PaymentMethod::create([
'customerId' => $customer->id,
'paymentMethodNonce' => Braintree\Test\Nonces::$transactableVisa,
'token' => $token1
]);
$updateResult = Braintree\Customer::update($customer->id, [
'defaultPaymentMethodToken' => $token1
]);
$this->assertEquals(true, $updateResult->success);
$this->assertEquals($updateResult->customer->defaultPaymentMethod()->token, $token1);
$token2 = 'TOKEN-' . strval(rand());
$result = Braintree\PaymentMethod::create([
'customerId' => $customer->id,
'paymentMethodNonce' => Braintree\Test\Nonces::$transactableMasterCard,
'token' => $token2
]);
$updateResult = Braintree\Customer::update($customer->id, [
'defaultPaymentMethodToken' => $token2
]);
$this->assertEquals(true, $updateResult->success);
$this->assertEquals($updateResult->customer->defaultPaymentMethod()->token, $token2);
}
public function testUpdateDefaultPaymentMethodFromOptions()
{
$result = Braintree\Customer::create([
'firstName' => 'Old First',
'lastName' => 'Old Last',
]);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$token1 = 'TOKEN-' . strval(rand());
$result = Braintree\PaymentMethod::create([
'customerId' => $customer->id,
'paymentMethodNonce' => Braintree\Test\Nonces::$transactableVisa,
'token' => $token1
]);
$updateResult = Braintree\Customer::update($customer->id, [
'creditCard' => [
'options' => [
'updateExistingToken' => $token1,
'makeDefault' => true
]
]
]);
$this->assertEquals(true, $updateResult->success);
$this->assertEquals($updateResult->customer->defaultPaymentMethod()->token, $token1);
$token2 = 'TOKEN-' . strval(rand());
$result = Braintree\PaymentMethod::create([
'customerId' => $customer->id,
'paymentMethodNonce' => Braintree\Test\Nonces::$transactableMasterCard,
'token' => $token2
]);
$updateResult = Braintree\Customer::update($customer->id, [
'creditCard' => [
'options' => [
'updateExistingToken' => $token2,
'makeDefault' => true
]
]
]);
$this->assertEquals(true, $updateResult->success);
$this->assertEquals($updateResult->customer->defaultPaymentMethod()->token, $token2);
}
public function testUpdate_doesNotWorkWithOnetimePayPalNonce()
{
$customerResult = Braintree\Customer::create([
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'options' => [
'makeDefault' => true
]
]
]);
$paypalAccountToken = 'PAYPALToken-' . strval(rand());
$http = new HttpClientApi(Braintree\Configuration::$global);
$nonce = $http->nonceForPayPalAccount([
'paypal_account' => [
'access_token' => 'PAYPAL_ACCESS_TOKEN',
'token' => $paypalAccountToken,
'options' => [
'makeDefault' => true
]
]
]);
$result = Braintree\Customer::update($customerResult->customer->id, [
'paymentMethodNonce' => $nonce
]);
$this->assertFalse($result->success);
$errors = $result->errors->forKey('customer')->forKey('paypalAccount')->errors;
$this->assertEquals(Braintree\Error\Codes::PAYPAL_ACCOUNT_CANNOT_VAULT_ONE_TIME_USE_PAYPAL_ACCOUNT, $errors[0]->code);
}
public function testUpdateNoValidate()
{
$result = Braintree\Customer::create([
'firstName' => 'Old First',
'lastName' => 'Old Last',
'company' => 'Old Company',
'email' => '[email protected]',
'phone' => 'old phone',
'fax' => 'old fax',
'website' => 'http://old.example.com'
]);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$updated = Braintree\Customer::updateNoValidate($customer->id, [
'firstName' => 'New First',
'lastName' => 'New Last',
'company' => 'New Company',
'email' => '[email protected]',
'phone' => 'new phone',
'fax' => 'new fax',
'website' => 'http://new.example.com'
]);
$this->assertEquals('New First', $updated->firstName);
$this->assertEquals('New Last', $updated->lastName);
$this->assertEquals('New Company', $updated->company);
$this->assertEquals('[email protected]', $updated->email);
$this->assertEquals('new phone', $updated->phone);
$this->assertEquals('new fax', $updated->fax);
$this->assertEquals('http://new.example.com', $updated->website);
}
public function testCreateFromTransparentRedirect()
{
Test\Helper::suppressDeprecationWarnings();
$queryString = $this->createCustomerViaTr(
[
'customer' => [
'first_name' => 'Joe',
'last_name' => 'Martin',
'credit_card' => [
'number' => '5105105105105100',
'expiration_date' => '05/12'
]
]
],
[
]
);
$result = Braintree\Customer::createFromTransparentRedirect($queryString);
$this->assertTrue($result->success);
$this->assertEquals('Joe', $result->customer->firstName);
$this->assertEquals('Martin', $result->customer->lastName);
$creditCard = $result->customer->creditCards[0];
$this->assertEquals('510510', $creditCard->bin);
$this->assertEquals('5100', $creditCard->last4);
$this->assertEquals('05/2012', $creditCard->expirationDate);
}
public function testCreateFromTransparentRedirect_withParamsInTrData()
{
Test\Helper::suppressDeprecationWarnings();
$queryString = $this->createCustomerViaTr(
[
],
[
'customer' => [
'firstName' => 'Joe',
'lastName' => 'Martin',
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12'
]
]
]
);
$result = Braintree\Customer::createFromTransparentRedirect($queryString);
$this->assertTrue($result->success);
$this->assertEquals('Joe', $result->customer->firstName);
$this->assertEquals('Martin', $result->customer->lastName);
$creditCard = $result->customer->creditCards[0];
$this->assertEquals('510510', $creditCard->bin);
$this->assertEquals('5100', $creditCard->last4);
$this->assertEquals('05/2012', $creditCard->expirationDate);
}
public function testCreateFromTransparentRedirect_withValidationErrors()
{
Test\Helper::suppressDeprecationWarnings();
$queryString = $this->createCustomerViaTr(
[
'customer' => [
'first_name' => str_repeat('x', 256),
'credit_card' => [
'number' => 'invalid',
'expiration_date' => ''
]
]
],
[
]
);
$result = Braintree\Customer::createFromTransparentRedirect($queryString);
$this->assertFalse($result->success);
$errors = $result->errors->forKey('customer')->onAttribute('firstName');
$this->assertEquals(Braintree\Error\Codes::CUSTOMER_FIRST_NAME_IS_TOO_LONG, $errors[0]->code);
$errors = $result->errors->forKey('customer')->forKey('creditCard')->onAttribute('number');
$this->assertEquals(Braintree\Error\Codes::CREDIT_CARD_NUMBER_INVALID_LENGTH, $errors[0]->code);
$errors = $result->errors->forKey('customer')->forKey('creditCard')->onAttribute('expirationDate');
$this->assertEquals(Braintree\Error\Codes::CREDIT_CARD_EXPIRATION_DATE_IS_REQUIRED, $errors[0]->code);
}
public function testCreateWithInvalidUTF8Bytes()
{
$result = Braintree\Customer::create([
'firstName' => "Jos\xe8 Maria"
]);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$this->assertEquals("Jos\xc3\xa8 Maria", $customer->firstName);
}
public function testCreateWithValidUTF8Bytes()
{
$result = Braintree\Customer::create([
'firstName' => "Jos\303\251"
]);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$this->assertEquals("Jos\303\251", $customer->firstName);
}
public function testUpdateFromTransparentRedirect()
{
Test\Helper::suppressDeprecationWarnings();
$customer = Braintree\Customer::createNoValidate();
$queryString = $this->updateCustomerViaTr(
[
'customer' => [
'first_name' => 'Joe',
'last_name' => 'Martin',
'email' => '[email protected]'
]
],
[
'customerId' => $customer->id
]
);
$result = Braintree\Customer::updateFromTransparentRedirect($queryString);
$this->assertTrue($result->success);
$this->assertEquals('Joe', $result->customer->firstName);
$this->assertEquals('Martin', $result->customer->lastName);
$this->assertEquals('[email protected]', $result->customer->email);
}
public function testUpdateFromTransparentRedirect_withParamsInTrData()
{
Test\Helper::suppressDeprecationWarnings();
$customer = Braintree\Customer::createNoValidate();
$queryString = $this->updateCustomerViaTr(
[
],
[
'customerId' => $customer->id,
'customer' => [
'firstName' => 'Joe',
'lastName' => 'Martin',
'email' => '[email protected]'
]
]
);
$result = Braintree\Customer::updateFromTransparentRedirect($queryString);
$this->assertTrue($result->success);
$this->assertEquals('Joe', $result->customer->firstName);
$this->assertEquals('Martin', $result->customer->lastName);
$this->assertEquals('[email protected]', $result->customer->email);
}
public function testUpdateFromTransparentRedirect_withValidationErrors()
{
Test\Helper::suppressDeprecationWarnings();
$customer = Braintree\Customer::createNoValidate();
$queryString = $this->updateCustomerViaTr(
[
'customer' => [
'first_name' => str_repeat('x', 256),
]
],
[
'customerId' => $customer->id
]
);
$result = Braintree\Customer::updateFromTransparentRedirect($queryString);
$this->assertFalse($result->success);
$errors = $result->errors->forKey('customer')->onAttribute('firstName');
$this->assertEquals(Braintree\Error\Codes::CUSTOMER_FIRST_NAME_IS_TOO_LONG, $errors[0]->code);
}
public function testUpdateFromTransparentRedirect_withUpdateExisting()
{
Test\Helper::suppressDeprecationWarnings();
$customer = Braintree\Customer::create([
'firstName' => 'Mike',
'lastName' => 'Jones',
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12',
'cardholderName' => 'Mike Jones',
'billingAddress' => [
'firstName' => 'Drew',
'lastName' => 'Smith'
]
]
])->customer;
$queryString = $this->updateCustomerViaTr(
[],
[
'customerId' => $customer->id,
'customer' => [
'firstName' => 'New First',
'lastName' => 'New Last',
'creditCard' => [
'number' => '4111111111111111',
'expirationDate' => '05/13',
'cardholderName' => 'New Cardholder',
'options' => [
'updateExistingToken' => $customer->creditCards[0]->token
],
'billingAddress' => [
'firstName' => 'New First Billing',
'lastName' => 'New Last Billing',
'options' => [
'updateExisting' => true
]
]
]
]
]
);
$result = Braintree\Customer::updateFromTransparentRedirect($queryString);
$this->assertTrue($result->success);
$this->assertEquals(true, $result->success);
$customer = $result->customer;
$this->assertEquals('New First', $customer->firstName);
$this->assertEquals('New Last', $customer->lastName);
$this->assertEquals(1, sizeof($result->customer->creditCards));
$creditCard = $customer->creditCards[0];
$this->assertEquals('411111', $creditCard->bin);
$this->assertEquals('1111', $creditCard->last4);
$this->assertEquals('New Cardholder', $creditCard->cardholderName);
$this->assertEquals('05/2013', $creditCard->expirationDate);
$this->assertEquals(1, sizeof($result->customer->addresses));
$address = $customer->addresses[0];
$this->assertEquals($address, $creditCard->billingAddress);
$this->assertEquals('New First Billing', $address->firstName);
$this->assertEquals('New Last Billing', $address->lastName);
}
public function testSale_createsASaleUsingGivenToken()
{
$customer = Braintree\Customer::createNoValidate([
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12'
]
]);
$creditCard = $customer->creditCards[0];
$result = Braintree\Customer::sale($customer->id, [
'amount' => '100.00'
]);
$this->assertTrue($result->success);
$this->assertEquals('100.00', $result->transaction->amount);
$this->assertEquals($customer->id, $result->transaction->customerDetails->id);
$this->assertEquals($creditCard->token, $result->transaction->creditCardDetails->token);
}
public function testSaleNoValidate_createsASaleUsingGivenToken()
{
$customer = Braintree\Customer::createNoValidate([
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12'
]
]);
$creditCard = $customer->creditCards[0];
$transaction = Braintree\Customer::saleNoValidate($customer->id, [
'amount' => '100.00'
]);
$this->assertEquals('100.00', $transaction->amount);
$this->assertEquals($customer->id, $transaction->customerDetails->id);
$this->assertEquals($creditCard->token, $transaction->creditCardDetails->token);
}
public function testSaleNoValidate_throwsIfInvalid()
{
$customer = Braintree\Customer::createNoValidate([
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12'
]
]);
$creditCard = $customer->creditCards[0];
$this->setExpectedException('Braintree\Exception\ValidationsFailed');
Braintree\Customer::saleNoValidate($customer->id, [
'amount' => 'invalid'
]);
}
public function testCredit_createsACreditUsingGivenCustomerId()
{
$customer = Braintree\Customer::createNoValidate([
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12'
]
]);
$creditCard = $customer->creditCards[0];
$result = Braintree\Customer::credit($customer->id, [
'amount' => '100.00'
]);
$this->assertTrue($result->success);
$this->assertEquals('100.00', $result->transaction->amount);
$this->assertEquals(Braintree\Transaction::CREDIT, $result->transaction->type);
$this->assertEquals($customer->id, $result->transaction->customerDetails->id);
$this->assertEquals($creditCard->token, $result->transaction->creditCardDetails->token);
}
public function testCreditNoValidate_createsACreditUsingGivenId()
{
$customer = Braintree\Customer::createNoValidate([
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12'
]
]);
$creditCard = $customer->creditCards[0];
$transaction = Braintree\Customer::creditNoValidate($customer->id, [
'amount' => '100.00'
]);
$this->assertEquals('100.00', $transaction->amount);
$this->assertEquals(Braintree\Transaction::CREDIT, $transaction->type);
$this->assertEquals($customer->id, $transaction->customerDetails->id);
$this->assertEquals($creditCard->token, $transaction->creditCardDetails->token);
}
public function testCreditNoValidate_throwsIfInvalid()
{
$customer = Braintree\Customer::createNoValidate([
'creditCard' => [
'number' => '5105105105105100',
'expirationDate' => '05/12'
]
]);
$creditCard = $customer->creditCards[0];
$this->setExpectedException('Braintree\Exception\ValidationsFailed');
Braintree\Customer::creditNoValidate($customer->id, [
'amount' => 'invalid'
]);
}
public function createCustomerViaTr($regularParams, $trParams)
{
Test\Helper::suppressDeprecationWarnings();
$trData = Braintree\TransparentRedirect::createCustomerData(
array_merge($trParams, ["redirectUrl" => "http://www.example.com"])
);
return Test\Helper::submitTrRequest(
Braintree\Customer::createCustomerUrl(),
$regularParams,
$trData
);
}
public function updateCustomerViaTr($regularParams, $trParams)
{
Test\Helper::suppressDeprecationWarnings();
$trData = Braintree\TransparentRedirect::updateCustomerData(
array_merge($trParams, ["redirectUrl" => "http://www.example.com"])
);
return Test\Helper::submitTrRequest(
Braintree\Customer::updateCustomerUrl(),
$regularParams,
$trData
);
}
}
Directory Contents
Dirs: 2 × Files: 34