You are here

class Braintree_CreditCardTest in Commerce Braintree 7

Same name in this branch
  1. 7 braintree_php/tests/unit/CreditCardTest.php \Braintree_CreditCardTest
  2. 7 braintree_php/tests/integration/CreditCardTest.php \Braintree_CreditCardTest

Hierarchy

Expanded class hierarchy of Braintree_CreditCardTest

File

braintree_php/tests/integration/CreditCardTest.php, line 4

View source
class Braintree_CreditCardTest extends PHPUnit_Framework_TestCase {
  function testCreate() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ));
    $this
      ->assertTrue($result->success);
    $this
      ->assertEquals($customer->id, $result->creditCard->customerId);
    $this
      ->assertEquals('510510', $result->creditCard->bin);
    $this
      ->assertEquals('5100', $result->creditCard->last4);
    $this
      ->assertEquals('Cardholder', $result->creditCard->cardholderName);
    $this
      ->assertEquals('05/2012', $result->creditCard->expirationDate);
    $this
      ->assertEquals(1, preg_match('/\\A\\w{32}\\z/', $result->creditCard->uniqueNumberIdentifier));
  }
  function testCreate_withDefault() {
    $customer = Braintree_Customer::createNoValidate();
    $card1 = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ))->creditCard;
    $this
      ->assertTrue($card1
      ->isDefault());
    $card2 = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
      'options' => array(
        'makeDefault' => true,
      ),
    ))->creditCard;
    $card1 = Braintree_CreditCard::find($card1->token);
    $this
      ->assertFalse($card1
      ->isDefault());
    $this
      ->assertTrue($card2
      ->isDefault());
  }
  function testCreate_withExpirationMonthAndYear() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => '5105105105105100',
      'expirationMonth' => '05',
      'expirationYear' => '2011',
    ));
    $this
      ->assertTrue($result->success);
    $this
      ->assertEquals($customer->id, $result->creditCard->customerId);
    $this
      ->assertEquals('510510', $result->creditCard->bin);
    $this
      ->assertEquals('5100', $result->creditCard->last4);
    $this
      ->assertEquals('Cardholder', $result->creditCard->cardholderName);
    $this
      ->assertEquals('05/2011', $result->creditCard->expirationDate);
  }
  function testCreate_withSpecifyingToken() {
    $token = strval(rand());
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/2011',
      'token' => $token,
    ));
    $this
      ->assertTrue($result->success);
    $this
      ->assertEquals($token, $result->creditCard->token);
    $this
      ->assertEquals($token, Braintree_CreditCard::find($token)->token);
  }
  function testCreate_withDuplicateCardCheck() {
    $customer = Braintree_Customer::createNoValidate();
    $attributes = array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/2011',
      'options' => array(
        'failOnDuplicatePaymentMethod' => true,
      ),
    );
    Braintree_CreditCard::create($attributes);
    $result = Braintree_CreditCard::create($attributes);
    $this
      ->assertFalse($result->success);
    $errors = $result->errors
      ->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));
  }
  function testCreate_withCardVerification() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/2011',
      'options' => array(
        'verifyCard' => true,
      ),
    ));
    $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('I', $result->creditCardVerification->cvvResponseCode);
    $this
      ->assertEquals(null, $result->creditCardVerification->avsErrorResponseCode);
    $this
      ->assertEquals('I', $result->creditCardVerification->avsPostalCodeResponseCode);
    $this
      ->assertEquals('I', $result->creditCardVerification->avsStreetAddressResponseCode);
  }
  function testCreate_withCardVerificationAndSpecificMerchantAccount() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/2011',
      'options' => array(
        'verificationMerchantAccountId' => Braintree_TestHelper::nonDefaultMerchantAccountId(),
        'verifyCard' => true,
      ),
    ));
    $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('I', $result->creditCardVerification->cvvResponseCode);
    $this
      ->assertEquals(null, $result->creditCardVerification->avsErrorResponseCode);
    $this
      ->assertEquals('I', $result->creditCardVerification->avsPostalCodeResponseCode);
    $this
      ->assertEquals('I', $result->creditCardVerification->avsStreetAddressResponseCode);
  }
  function testCreate_withBillingAddress() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Peter Tomlin',
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
      'billingAddress' => array(
        'firstName' => 'Drew',
        'lastName' => 'Smith',
        'company' => 'Smith Co.',
        'streetAddress' => '1 E Main St',
        'extendedAddress' => 'Suite 101',
        'locality' => 'Chicago',
        'region' => 'IL',
        'postalCode' => '60622',
        'countryName' => 'Micronesia',
        'countryCodeAlpha2' => 'FM',
        'countryCodeAlpha3' => 'FSM',
        'countryCodeNumeric' => '583',
      ),
    ));
    $this
      ->assertTrue($result->success);
    $this
      ->assertEquals($customer->id, $result->creditCard->customerId);
    $this
      ->assertEquals('510510', $result->creditCard->bin);
    $this
      ->assertEquals('5100', $result->creditCard->last4);
    $this
      ->assertEquals('Peter Tomlin', $result->creditCard->cardholderName);
    $this
      ->assertEquals('05/2012', $result->creditCard->expirationDate);
    $address = $result->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('Micronesia', $address->countryName);
    $this
      ->assertEquals('FM', $address->countryCodeAlpha2);
    $this
      ->assertEquals('FSM', $address->countryCodeAlpha3);
    $this
      ->assertEquals('583', $address->countryCodeNumeric);
  }
  function testCreate_withExistingBillingAddress() {
    $customer = Braintree_Customer::createNoValidate();
    $existingAddress = Braintree_Address::createNoValidate(array(
      'customerId' => $customer->id,
      'firstName' => 'John',
    ));
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
      'billingAddressId' => $existingAddress->id,
    ));
    $this
      ->assertTrue($result->success);
    $address = $result->creditCard->billingAddress;
    $this
      ->assertEquals($existingAddress->id, $address->id);
    $this
      ->assertEquals('John', $address->firstName);
  }
  function testCreate_withValidationErrors() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'expirationDate' => 'invalid',
      'billingAddress' => array(
        'countryName' => 'Tuvalu',
        'countryCodeAlpha2' => 'US',
      ),
    ));
    $this
      ->assertFalse($result->success);
    $errors = $result->errors
      ->forKey('creditCard')
      ->onAttribute('expirationDate');
    $this
      ->assertEquals(Braintree_Error_Codes::CREDIT_CARD_EXPIRATION_DATE_IS_INVALID, $errors[0]->code);
    $this
      ->assertEquals(1, preg_match('/Credit card number is required\\./', $result->message));
    $this
      ->assertEquals(1, preg_match('/Customer ID is required\\./', $result->message));
    $this
      ->assertEquals(1, preg_match('/Expiration date is invalid\\./', $result->message));
    $errors = $result->errors
      ->forKey('creditCard')
      ->forKey('billingAddress')
      ->onAttribute('base');
    $this
      ->assertEquals(Braintree_Error_Codes::ADDRESS_INCONSISTENT_COUNTRY, $errors[0]->code);
  }
  function testCreateNoValidate_throwsIfValidationsFail() {
    $this
      ->setExpectedException('Braintree_Exception_ValidationsFailed');
    $customer = Braintree_Customer::createNoValidate();
    Braintree_CreditCard::createNoValidate(array(
      'expirationDate' => 'invalid',
    ));
  }
  function testCreateNoValidate_returnsCreditCardIfValid() {
    $customer = Braintree_Customer::createNoValidate();
    $creditCard = Braintree_CreditCard::createNoValidate(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ));
    $this
      ->assertEquals($customer->id, $creditCard->customerId);
    $this
      ->assertEquals('510510', $creditCard->bin);
    $this
      ->assertEquals('5100', $creditCard->last4);
    $this
      ->assertEquals('Cardholder', $creditCard->cardholderName);
    $this
      ->assertEquals('05/2012', $creditCard->expirationDate);
  }
  function testCreateFromTransparentRedirect() {
    Braintree_TestHelper::suppressDeprecationWarnings();
    $customer = Braintree_Customer::createNoValidate();
    $queryString = $this
      ->createCreditCardViaTr(array(
      'credit_card' => array(
        'number' => '5105105105105100',
        'expiration_date' => '05/12',
      ),
    ), array(
      'creditCard' => array(
        'customerId' => $customer->id,
      ),
    ));
    $result = Braintree_CreditCard::createFromTransparentRedirect($queryString);
    $this
      ->assertTrue($result->success);
    $this
      ->assertEquals('510510', $result->creditCard->bin);
    $this
      ->assertEquals('5100', $result->creditCard->last4);
    $this
      ->assertEquals('05/2012', $result->creditCard->expirationDate);
  }
  function testCreateFromTransparentRedirect_withDefault() {
    Braintree_TestHelper::suppressDeprecationWarnings();
    $customer = Braintree_Customer::createNoValidate();
    $queryString = $this
      ->createCreditCardViaTr(array(
      'credit_card' => array(
        'number' => '5105105105105100',
        'expiration_date' => '05/12',
        'options' => array(
          'make_default' => true,
        ),
      ),
    ), array(
      'creditCard' => array(
        'customerId' => $customer->id,
      ),
    ));
    $result = Braintree_CreditCard::createFromTransparentRedirect($queryString);
    $this
      ->assertTrue($result->creditCard
      ->isDefault());
  }
  function testUpdateFromTransparentRedirect() {
    $customer = Braintree_Customer::createNoValidate();
    $creditCard = Braintree_CreditCard::createNoValidate(array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ));
    $queryString = $this
      ->updateCreditCardViaTr(array(
      'credit_card' => array(
        'number' => '4111111111111111',
        'expiration_date' => '01/11',
      ),
    ), array(
      'paymentMethodToken' => $creditCard->token,
    ));
    $result = Braintree_CreditCard::updateFromTransparentRedirect($queryString);
    $this
      ->assertTrue($result->success);
    $this
      ->assertEquals('411111', $result->creditCard->bin);
    $this
      ->assertEquals('1111', $result->creditCard->last4);
    $this
      ->assertEquals('01/2011', $result->creditCard->expirationDate);
  }
  function testUpdateFromTransparentRedirect_withDefault() {
    $customer = Braintree_Customer::createNoValidate();
    $card1 = Braintree_CreditCard::createNoValidate(array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ));
    $card2 = Braintree_CreditCard::createNoValidate(array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ));
    $this
      ->assertFalse($card2
      ->isDefault());
    $queryString = $this
      ->updateCreditCardViaTr(array(
      'credit_card' => array(
        'options' => array(
          'make_default' => true,
        ),
      ),
    ), array(
      'paymentMethodToken' => $card2->token,
    ));
    $result = Braintree_CreditCard::updateFromTransparentRedirect($queryString);
    $this
      ->assertFalse(Braintree_CreditCard::find($card1->token)
      ->isDefault());
    $this
      ->assertTrue(Braintree_CreditCard::find($card2->token)
      ->isDefault());
  }
  function testUpdateFromTransparentRedirect_andUpdateExistingBillingAddress() {
    $customer = Braintree_Customer::createNoValidate();
    $card = Braintree_CreditCard::createNoValidate(array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
      'billingAddress' => array(
        'firstName' => 'Drew',
        'lastName' => 'Smith',
        'company' => 'Smith Co.',
        'streetAddress' => '123 Old St',
        'extendedAddress' => 'Suite 101',
        'locality' => 'Chicago',
        'region' => 'IL',
        'postalCode' => '60622',
        'countryName' => 'United States of America',
      ),
    ));
    $queryString = $this
      ->updateCreditCardViaTr(array(), array(
      'paymentMethodToken' => $card->token,
      'creditCard' => array(
        'billingAddress' => array(
          'streetAddress' => '123 New St',
          'locality' => 'St. Louis',
          'region' => 'MO',
          'postalCode' => '63119',
          'options' => array(
            'updateExisting' => True,
          ),
        ),
      ),
    ));
    $result = Braintree_CreditCard::updateFromTransparentRedirect($queryString);
    $this
      ->assertTrue($result->success);
    $card = $result->creditCard;
    $this
      ->assertEquals(1, sizeof(Braintree_Customer::find($customer->id)->addresses));
    $this
      ->assertEquals('123 New St', $card->billingAddress->streetAddress);
    $this
      ->assertEquals('St. Louis', $card->billingAddress->locality);
    $this
      ->assertEquals('MO', $card->billingAddress->region);
    $this
      ->assertEquals('63119', $card->billingAddress->postalCode);
  }
  function testSale_createsASaleUsingGivenToken() {
    $customer = Braintree_Customer::createNoValidate(array(
      'creditCard' => array(
        'number' => '5105105105105100',
        'expirationDate' => '05/12',
      ),
    ));
    $creditCard = $customer->creditCards[0];
    $result = Braintree_CreditCard::sale($creditCard->token, array(
      '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);
  }
  function testSaleNoValidate_createsASaleUsingGivenToken() {
    $customer = Braintree_Customer::createNoValidate(array(
      'creditCard' => array(
        'number' => '5105105105105100',
        'expirationDate' => '05/12',
      ),
    ));
    $creditCard = $customer->creditCards[0];
    $transaction = Braintree_CreditCard::saleNoValidate($creditCard->token, array(
      'amount' => '100.00',
    ));
    $this
      ->assertEquals('100.00', $transaction->amount);
    $this
      ->assertEquals($customer->id, $transaction->customerDetails->id);
    $this
      ->assertEquals($creditCard->token, $transaction->creditCardDetails->token);
  }
  function testSaleNoValidate_createsASaleUsingGivenTokenAndCvv() {
    $customer = Braintree_Customer::createNoValidate(array(
      'creditCard' => array(
        'number' => '5105105105105100',
        'expirationDate' => '05/12',
      ),
    ));
    $creditCard = $customer->creditCards[0];
    $transaction = Braintree_CreditCard::saleNoValidate($creditCard->token, array(
      'amount' => '100.00',
      'creditCard' => array(
        'cvv' => '301',
      ),
    ));
    $this
      ->assertEquals('100.00', $transaction->amount);
    $this
      ->assertEquals($customer->id, $transaction->customerDetails->id);
    $this
      ->assertEquals($creditCard->token, $transaction->creditCardDetails->token);
    $this
      ->assertEquals('S', $transaction->cvvResponseCode);
  }
  function testSaleNoValidate_throwsIfInvalid() {
    $customer = Braintree_Customer::createNoValidate(array(
      'creditCard' => array(
        'number' => '5105105105105100',
        'expirationDate' => '05/12',
      ),
    ));
    $creditCard = $customer->creditCards[0];
    $this
      ->setExpectedException('Braintree_Exception_ValidationsFailed');
    Braintree_CreditCard::saleNoValidate($creditCard->token, array(
      'amount' => 'invalid',
    ));
  }
  function testCredit_createsACreditUsingGivenToken() {
    $customer = Braintree_Customer::createNoValidate(array(
      'creditCard' => array(
        'number' => '5105105105105100',
        'expirationDate' => '05/12',
      ),
    ));
    $creditCard = $customer->creditCards[0];
    $result = Braintree_CreditCard::credit($creditCard->token, array(
      '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);
  }
  function testCreditNoValidate_createsACreditUsingGivenToken() {
    $customer = Braintree_Customer::createNoValidate(array(
      'creditCard' => array(
        'number' => '5105105105105100',
        'expirationDate' => '05/12',
      ),
    ));
    $creditCard = $customer->creditCards[0];
    $transaction = Braintree_CreditCard::creditNoValidate($creditCard->token, array(
      '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);
  }
  function testCreditNoValidate_throwsIfInvalid() {
    $customer = Braintree_Customer::createNoValidate(array(
      'creditCard' => array(
        'number' => '5105105105105100',
        'expirationDate' => '05/12',
      ),
    ));
    $creditCard = $customer->creditCards[0];
    $this
      ->setExpectedException('Braintree_Exception_ValidationsFailed');
    Braintree_CreditCard::creditNoValidate($creditCard->token, array(
      'amount' => 'invalid',
    ));
  }
  function testExpired() {
    $collection = Braintree_CreditCard::expired();
    $this
      ->assertTrue($collection
      ->maximumCount() > 1);
    $arr = array();
    foreach ($collection as $creditCard) {
      $this
        ->assertTrue($creditCard
        ->isExpired());
      array_push($arr, $creditCard->token);
    }
    $uniqueCreditCardTokens = array_unique(array_values($arr));
    $this
      ->assertEquals($collection
      ->maximumCount(), count($uniqueCreditCardTokens));
  }
  function testExpiringBetween() {
    $collection = Braintree_CreditCard::expiringBetween(mktime(0, 0, 0, 1, 1, 2010), mktime(23, 59, 59, 12, 31, 2010));
    $this
      ->assertTrue($collection
      ->maximumCount() > 1);
    $arr = array();
    foreach ($collection as $creditCard) {
      $this
        ->assertEquals('2010', $creditCard->expirationYear);
      array_push($arr, $creditCard->token);
    }
    $uniqueCreditCardTokens = array_unique(array_values($arr));
    $this
      ->assertEquals($collection
      ->maximumCount(), count($uniqueCreditCardTokens));
  }
  function testExpiringBetween_parsesCreditCardDetailsUnderTransactionsCorrectly() {
    $collection = Braintree_CreditCard::expiringBetween(mktime(0, 0, 0, 1, 1, 2010), mktime(23, 59, 59, 12, 31, 2010));
    $this
      ->assertTrue($collection
      ->maximumCount() > 1);
    foreach ($collection as $creditCard) {
      foreach ($creditCard->subscriptions as $subscription) {
        foreach ($subscription->transactions as $transaction) {
          $this
            ->assertNotNull($transaction->creditCardDetails->expirationMonth);
        }
      }
    }
  }
  function testFind() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ));
    $this
      ->assertTrue($result->success);
    $creditCard = Braintree_CreditCard::find($result->creditCard->token);
    $this
      ->assertEquals($customer->id, $creditCard->customerId);
    $this
      ->assertEquals('510510', $creditCard->bin);
    $this
      ->assertEquals('5100', $creditCard->last4);
    $this
      ->assertEquals('Cardholder', $creditCard->cardholderName);
    $this
      ->assertEquals('05/2012', $creditCard->expirationDate);
    $this
      ->assertEquals(array(), $creditCard->subscriptions);
  }
  function testFindReturnsAssociatedSubscriptions() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
      'billingAddress' => array(
        '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',
      ),
    ));
    $id = strval(rand());
    Braintree_Subscription::create(array(
      'id' => $id,
      'paymentMethodToken' => $result->creditCard->token,
      'planId' => 'integration_trialless_plan',
      'price' => '1.00',
    ));
    $creditCard = Braintree_CreditCard::find($result->creditCard->token);
    $this
      ->assertEquals($id, $creditCard->subscriptions[0]->id);
    $this
      ->assertEquals('integration_trialless_plan', $creditCard->subscriptions[0]->planId);
    $this
      ->assertEquals('1.00', $creditCard->subscriptions[0]->price);
  }
  function testFind_throwsIfCannotBeFound() {
    $this
      ->setExpectedException('Braintree_Exception_NotFound');
    Braintree_CreditCard::find('invalid-token');
  }
  function testFind_throwsUsefulErrorMessagesWhenEmpty() {
    $this
      ->setExpectedException('InvalidArgumentException', 'expected credit card id to be set');
    Braintree_CreditCard::find('');
  }
  function testFind_throwsUsefulErrorMessagesWhenInvalid() {
    $this
      ->setExpectedException('InvalidArgumentException', '@ is an invalid credit card id');
    Braintree_CreditCard::find('@');
  }
  function testUpdate() {
    $customer = Braintree_Customer::createNoValidate();
    $createResult = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Old Cardholder',
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ));
    $this
      ->assertTrue($createResult->success);
    $updateResult = Braintree_CreditCard::update($createResult->creditCard->token, array(
      'cardholderName' => 'New Cardholder',
      'number' => '4111111111111111',
      'expirationDate' => '07/14',
    ));
    $this
      ->assertEquals($customer->id, $updateResult->creditCard->customerId);
    $this
      ->assertEquals('411111', $updateResult->creditCard->bin);
    $this
      ->assertEquals('1111', $updateResult->creditCard->last4);
    $this
      ->assertEquals('New Cardholder', $updateResult->creditCard->cardholderName);
    $this
      ->assertEquals('07/2014', $updateResult->creditCard->expirationDate);
  }
  function testUpdate_withCardVerification() {
    $customer = Braintree_Customer::createNoValidate();
    $initialCreditCard = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ))->creditCard;
    $result = Braintree_CreditCard::update($initialCreditCard->token, array(
      'billingAddress' => array(
        'region' => 'IL',
      ),
      'options' => array(
        'verifyCard' => true,
      ),
    ));
    $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('I', $result->creditCardVerification->cvvResponseCode);
    $this
      ->assertEquals(null, $result->creditCardVerification->avsErrorResponseCode);
    $this
      ->assertEquals('I', $result->creditCardVerification->avsPostalCodeResponseCode);
    $this
      ->assertEquals('I', $result->creditCardVerification->avsStreetAddressResponseCode);
    $this
      ->assertEquals(Braintree_TestHelper::defaultMerchantAccountId(), $result->creditCardVerification->merchantAccountId);
  }
  function testUpdate_withCardVerificationAndSpecificMerchantAccount() {
    $customer = Braintree_Customer::createNoValidate();
    $initialCreditCard = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ))->creditCard;
    $result = Braintree_CreditCard::update($initialCreditCard->token, array(
      'billingAddress' => array(
        'region' => 'IL',
      ),
      'options' => array(
        'verificationMerchantAccountId' => Braintree_TestHelper::nonDefaultMerchantAccountId(),
        'verifyCard' => true,
      ),
    ));
    $this
      ->assertFalse($result->success);
    $this
      ->assertEquals(Braintree_Result_CreditCardVerification::PROCESSOR_DECLINED, $result->creditCardVerification->status);
    $this
      ->assertEquals(Braintree_TestHelper::nonDefaultMerchantAccountId(), $result->creditCardVerification->merchantAccountId);
  }
  function testUpdate_createsNewBillingAddressByDefault() {
    $customer = Braintree_Customer::createNoValidate();
    $initialCreditCard = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
      'billingAddress' => array(
        'streetAddress' => '123 Nigeria Ave',
      ),
    ))->creditCard;
    $updatedCreditCard = Braintree_CreditCard::update($initialCreditCard->token, array(
      'billingAddress' => array(
        'region' => 'IL',
      ),
    ))->creditCard;
    $this
      ->assertEquals('IL', $updatedCreditCard->billingAddress->region);
    $this
      ->assertNull($updatedCreditCard->billingAddress->streetAddress);
    $this
      ->assertNotEquals($initialCreditCard->billingAddress->id, $updatedCreditCard->billingAddress->id);
  }
  function testUpdate_updatesExistingBillingAddressIfUpdateExistingOptionIsTrue() {
    $customer = Braintree_Customer::createNoValidate();
    $initialCreditCard = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
      'billingAddress' => array(
        'countryName' => 'Turkey',
        'countryCodeAlpha2' => 'TR',
        'countryCodeAlpha3' => 'TUR',
        'countryCodeNumeric' => '792',
      ),
    ))->creditCard;
    $updatedCreditCard = Braintree_CreditCard::update($initialCreditCard->token, array(
      'billingAddress' => array(
        'countryName' => 'Thailand',
        'countryCodeAlpha2' => 'TH',
        'countryCodeAlpha3' => 'THA',
        'countryCodeNumeric' => '764',
        'options' => array(
          'updateExisting' => True,
        ),
      ),
    ))->creditCard;
    $this
      ->assertEquals('Thailand', $updatedCreditCard->billingAddress->countryName);
    $this
      ->assertEquals('TH', $updatedCreditCard->billingAddress->countryCodeAlpha2);
    $this
      ->assertEquals('THA', $updatedCreditCard->billingAddress->countryCodeAlpha3);
    $this
      ->assertEquals('764', $updatedCreditCard->billingAddress->countryCodeNumeric);
    $this
      ->assertEquals($initialCreditCard->billingAddress->id, $updatedCreditCard->billingAddress->id);
  }
  function testUpdate_canChangeToken() {
    $oldToken = strval(rand());
    $newToken = strval(rand());
    $customer = Braintree_Customer::createNoValidate();
    $createResult = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'token' => $oldToken,
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ));
    $this
      ->assertTrue($createResult->success);
    $updateResult = Braintree_CreditCard::update($oldToken, array(
      'token' => $newToken,
    ));
    $this
      ->assertEquals($customer->id, $updateResult->creditCard->customerId);
    $this
      ->assertEquals($newToken, $updateResult->creditCard->token);
    $this
      ->assertEquals($newToken, Braintree_CreditCard::find($newToken)->token);
  }
  function testUpdateNoValidate() {
    $customer = Braintree_Customer::createNoValidate();
    $creditCard = Braintree_CreditCard::createNoValidate(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Old Cardholder',
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ));
    $updatedCard = Braintree_CreditCard::updateNoValidate($creditCard->token, array(
      'cardholderName' => 'New Cardholder',
      'number' => '4111111111111111',
      'expirationDate' => '07/14',
    ));
    $this
      ->assertEquals($customer->id, $updatedCard->customerId);
    $this
      ->assertEquals('411111', $updatedCard->bin);
    $this
      ->assertEquals('1111', $updatedCard->last4);
    $this
      ->assertEquals('New Cardholder', $updatedCard->cardholderName);
    $this
      ->assertEquals('07/2014', $updatedCard->expirationDate);
  }
  function testUpdateNoValidate_throwsIfInvalid() {
    $customer = Braintree_Customer::createNoValidate();
    $creditCard = Braintree_CreditCard::createNoValidate(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Old Cardholder',
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ));
    $this
      ->setExpectedException('Braintree_Exception_ValidationsFailed');
    Braintree_CreditCard::updateNoValidate($creditCard->token, array(
      'number' => 'invalid',
    ));
  }
  function testUpdate_withDefault() {
    $customer = Braintree_Customer::createNoValidate();
    $card1 = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ))->creditCard;
    $card2 = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ))->creditCard;
    $this
      ->assertTrue($card1
      ->isDefault());
    $this
      ->assertFalse($card2
      ->isDefault());
    Braintree_CreditCard::update($card2->token, array(
      'options' => array(
        'makeDefault' => true,
      ),
    ))->creditCard;
    $this
      ->assertFalse(Braintree_CreditCard::find($card1->token)
      ->isDefault());
    $this
      ->assertTrue(Braintree_CreditCard::find($card2->token)
      ->isDefault());
  }
  function testDelete_deletesThePaymentMethod() {
    $customer = Braintree_Customer::createNoValidate(array());
    $creditCard = Braintree_CreditCard::createNoValidate(array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/12',
    ));
    Braintree_CreditCard::find($creditCard->token);
    Braintree_CreditCard::delete($creditCard->token);
    $this
      ->setExpectedException('Braintree_Exception_NotFound');
    Braintree_CreditCard::find($creditCard->token);
  }
  function testGatewayRejectionOnCVV() {
    $old_merchant_id = Braintree_Configuration::merchantId();
    $old_public_key = Braintree_Configuration::publicKey();
    $old_private_key = Braintree_Configuration::privateKey();
    Braintree_Configuration::merchantId('processing_rules_merchant_id');
    Braintree_Configuration::publicKey('processing_rules_public_key');
    Braintree_Configuration::privateKey('processing_rules_private_key');
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'number' => '4111111111111111',
      'expirationDate' => '05/2011',
      'cvv' => '200',
      'options' => array(
        'verifyCard' => true,
      ),
    ));
    Braintree_Configuration::merchantId($old_merchant_id);
    Braintree_Configuration::publicKey($old_public_key);
    Braintree_Configuration::privateKey($old_private_key);
    $this
      ->assertFalse($result->success);
    $this
      ->assertEquals(Braintree_Transaction::CVV, $result->creditCardVerification->gatewayRejectionReason);
  }
  function testGatewayRejectionIsNullOnProcessorDecline() {
    $old_merchant_id = Braintree_Configuration::merchantId();
    $old_public_key = Braintree_Configuration::publicKey();
    $old_private_key = Braintree_Configuration::privateKey();
    Braintree_Configuration::merchantId('processing_rules_merchant_id');
    Braintree_Configuration::publicKey('processing_rules_public_key');
    Braintree_Configuration::privateKey('processing_rules_private_key');
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'number' => '5105105105105100',
      'expirationDate' => '05/2011',
      'cvv' => '200',
      'options' => array(
        'verifyCard' => true,
      ),
    ));
    Braintree_Configuration::merchantId($old_merchant_id);
    Braintree_Configuration::publicKey($old_public_key);
    Braintree_Configuration::privateKey($old_private_key);
    $this
      ->assertFalse($result->success);
    $this
      ->assertNull($result->creditCardVerification->gatewayRejectionReason);
  }
  function createCreditCardViaTr($regularParams, $trParams) {
    $trData = Braintree_TransparentRedirect::createCreditCardData(array_merge($trParams, array(
      "redirectUrl" => "http://www.example.com",
    )));
    return Braintree_TestHelper::submitTrRequest(Braintree_CreditCard::createCreditCardUrl(), $regularParams, $trData);
  }
  function updateCreditCardViaTr($regularParams, $trParams) {
    $trData = Braintree_TransparentRedirect::updateCreditCardData(array_merge($trParams, array(
      "redirectUrl" => "http://www.example.com",
    )));
    return Braintree_TestHelper::submitTrRequest(Braintree_CreditCard::updateCreditCardUrl(), $regularParams, $trData);
  }
  function testPrepaidCard() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => Braintree_CreditCardNumbers_CardTypeIndicators::PREPAID,
      'expirationDate' => '05/12',
      'options' => array(
        'verifyCard' => true,
      ),
    ));
    $this
      ->assertEquals(Braintree_CreditCard::PREPAID_YES, $result->creditCard->prepaid);
  }
  function testCommercialCard() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => Braintree_CreditCardNumbers_CardTypeIndicators::COMMERCIAL,
      'expirationDate' => '05/12',
      'options' => array(
        'verifyCard' => true,
      ),
    ));
    $this
      ->assertEquals(Braintree_CreditCard::COMMERCIAL_YES, $result->creditCard->commercial);
  }
  function testDebitCard() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => Braintree_CreditCardNumbers_CardTypeIndicators::DEBIT,
      'expirationDate' => '05/12',
      'options' => array(
        'verifyCard' => true,
      ),
    ));
    $this
      ->assertEquals(Braintree_CreditCard::DEBIT_YES, $result->creditCard->debit);
  }
  function testPayrollCard() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => Braintree_CreditCardNumbers_CardTypeIndicators::PAYROLL,
      'expirationDate' => '05/12',
      'options' => array(
        'verifyCard' => true,
      ),
    ));
    $this
      ->assertEquals(Braintree_CreditCard::PAYROLL_YES, $result->creditCard->payroll);
  }
  function testHealthCareCard() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => Braintree_CreditCardNumbers_CardTypeIndicators::HEALTHCARE,
      'expirationDate' => '05/12',
      'options' => array(
        'verifyCard' => true,
      ),
    ));
    $this
      ->assertEquals(Braintree_CreditCard::HEALTHCARE_YES, $result->creditCard->healthcare);
  }
  function testDurbinRegulatedCard() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => Braintree_CreditCardNumbers_CardTypeIndicators::DURBIN_REGULATED,
      'expirationDate' => '05/12',
      'options' => array(
        'verifyCard' => true,
      ),
    ));
    $this
      ->assertEquals(Braintree_CreditCard::DURBIN_REGULATED_YES, $result->creditCard->durbinRegulated);
  }
  function testNegativeCardTypeIndicators() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => Braintree_CreditCardNumbers_CardTypeIndicators::NO,
      'expirationDate' => '05/12',
      'options' => array(
        'verifyCard' => true,
      ),
    ));
    $this
      ->assertEquals(Braintree_CreditCard::PREPAID_NO, $result->creditCard->prepaid);
    $this
      ->assertEquals(Braintree_CreditCard::DURBIN_REGULATED_NO, $result->creditCard->durbinRegulated);
    $this
      ->assertEquals(Braintree_CreditCard::PAYROLL_NO, $result->creditCard->payroll);
    $this
      ->assertEquals(Braintree_CreditCard::DEBIT_NO, $result->creditCard->debit);
    $this
      ->assertEquals(Braintree_CreditCard::HEALTHCARE_NO, $result->creditCard->healthcare);
    $this
      ->assertEquals(Braintree_CreditCard::COMMERCIAL_NO, $result->creditCard->commercial);
  }
  function testUnknownCardTypeIndicators() {
    $customer = Braintree_Customer::createNoValidate();
    $result = Braintree_CreditCard::create(array(
      'customerId' => $customer->id,
      'cardholderName' => 'Cardholder',
      'number' => Braintree_CreditCardNumbers_CardTypeIndicators::UNKNOWN,
      'expirationDate' => '05/12',
      'options' => array(
        'verifyCard' => true,
      ),
    ));
    $this
      ->assertEquals(Braintree_CreditCard::PREPAID_UNKNOWN, $result->creditCard->prepaid);
    $this
      ->assertEquals(Braintree_CreditCard::DURBIN_REGULATED_UNKNOWN, $result->creditCard->durbinRegulated);
    $this
      ->assertEquals(Braintree_CreditCard::PAYROLL_UNKNOWN, $result->creditCard->payroll);
    $this
      ->assertEquals(Braintree_CreditCard::DEBIT_UNKNOWN, $result->creditCard->debit);
    $this
      ->assertEquals(Braintree_CreditCard::HEALTHCARE_UNKNOWN, $result->creditCard->healthcare);
    $this
      ->assertEquals(Braintree_CreditCard::COMMERCIAL_UNKNOWN, $result->creditCard->commercial);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Braintree_CreditCardTest::createCreditCardViaTr function
Braintree_CreditCardTest::testCommercialCard function
Braintree_CreditCardTest::testCreate function
Braintree_CreditCardTest::testCreateFromTransparentRedirect function
Braintree_CreditCardTest::testCreateFromTransparentRedirect_withDefault function
Braintree_CreditCardTest::testCreateNoValidate_returnsCreditCardIfValid function
Braintree_CreditCardTest::testCreateNoValidate_throwsIfValidationsFail function
Braintree_CreditCardTest::testCreate_withBillingAddress function
Braintree_CreditCardTest::testCreate_withCardVerification function
Braintree_CreditCardTest::testCreate_withCardVerificationAndSpecificMerchantAccount function
Braintree_CreditCardTest::testCreate_withDefault function
Braintree_CreditCardTest::testCreate_withDuplicateCardCheck function
Braintree_CreditCardTest::testCreate_withExistingBillingAddress function
Braintree_CreditCardTest::testCreate_withExpirationMonthAndYear function
Braintree_CreditCardTest::testCreate_withSpecifyingToken function
Braintree_CreditCardTest::testCreate_withValidationErrors function
Braintree_CreditCardTest::testCreditNoValidate_createsACreditUsingGivenToken function
Braintree_CreditCardTest::testCreditNoValidate_throwsIfInvalid function
Braintree_CreditCardTest::testCredit_createsACreditUsingGivenToken function
Braintree_CreditCardTest::testDebitCard function
Braintree_CreditCardTest::testDelete_deletesThePaymentMethod function
Braintree_CreditCardTest::testDurbinRegulatedCard function
Braintree_CreditCardTest::testExpired function
Braintree_CreditCardTest::testExpiringBetween function
Braintree_CreditCardTest::testExpiringBetween_parsesCreditCardDetailsUnderTransactionsCorrectly function
Braintree_CreditCardTest::testFind function
Braintree_CreditCardTest::testFindReturnsAssociatedSubscriptions function
Braintree_CreditCardTest::testFind_throwsIfCannotBeFound function
Braintree_CreditCardTest::testFind_throwsUsefulErrorMessagesWhenEmpty function
Braintree_CreditCardTest::testFind_throwsUsefulErrorMessagesWhenInvalid function
Braintree_CreditCardTest::testGatewayRejectionIsNullOnProcessorDecline function
Braintree_CreditCardTest::testGatewayRejectionOnCVV function
Braintree_CreditCardTest::testHealthCareCard function
Braintree_CreditCardTest::testNegativeCardTypeIndicators function
Braintree_CreditCardTest::testPayrollCard function
Braintree_CreditCardTest::testPrepaidCard function
Braintree_CreditCardTest::testSaleNoValidate_createsASaleUsingGivenToken function
Braintree_CreditCardTest::testSaleNoValidate_createsASaleUsingGivenTokenAndCvv function
Braintree_CreditCardTest::testSaleNoValidate_throwsIfInvalid function
Braintree_CreditCardTest::testSale_createsASaleUsingGivenToken function
Braintree_CreditCardTest::testUnknownCardTypeIndicators function
Braintree_CreditCardTest::testUpdate function
Braintree_CreditCardTest::testUpdateFromTransparentRedirect function
Braintree_CreditCardTest::testUpdateFromTransparentRedirect_andUpdateExistingBillingAddress function
Braintree_CreditCardTest::testUpdateFromTransparentRedirect_withDefault function
Braintree_CreditCardTest::testUpdateNoValidate function
Braintree_CreditCardTest::testUpdateNoValidate_throwsIfInvalid function
Braintree_CreditCardTest::testUpdate_canChangeToken function
Braintree_CreditCardTest::testUpdate_createsNewBillingAddressByDefault function
Braintree_CreditCardTest::testUpdate_updatesExistingBillingAddressIfUpdateExistingOptionIsTrue function
Braintree_CreditCardTest::testUpdate_withCardVerification function
Braintree_CreditCardTest::testUpdate_withCardVerificationAndSpecificMerchantAccount function
Braintree_CreditCardTest::testUpdate_withDefault function
Braintree_CreditCardTest::updateCreditCardViaTr function