diff --git a/.gitignore b/.gitignore index 437354b..bac603c 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ build .project .settings .buildpath +atlassian-ide-plugin.xml *.bak # Composer diff --git a/README.md b/README.md index 26915e0..0b065a8 100644 --- a/README.md +++ b/README.md @@ -104,10 +104,26 @@ use PayPal\Api\Payment; ## SDK Configuration The samples in this repo pick the SDK configuration from the `sdk_config.ini` file. If you do not want to use an ini file or want to pick your configuration dynamically, you can use the `$apiContext->setConfig()` method to pass in the configuration as a hashmap. See the `sample/bootstrap.php` file for an example. - + +## Testing + +There are two kinds of tests that we include in our sdk package. Unit tests, and Integration Tests. + +* **Unit Tests** + * Unit tests can be executed by running this command `phpunit` at Paypal SDK root location. + * It executes the tests with configuration stored in `phpunit.xml` file. +* **Integration Tests** + * Integration tests make curl requests to sandbox environments by default. It would test both unit as well as integration tests. To execute, run this command `phpunit -c phpunit.integration.xml` at Paypal SDK root location. + * It executes the tests with configuration stored in `phpunit.integration.xml` file. + * The configurations could be changed from `tests\sdk_config.ini` file. ## Contributing +* If you find solution to an [issue/improvements](https://github.com/paypal/rest-api-sdk-php/issues) in sdk that would be helpful to everyone, feel free to send us a pull request. +* The ideal approach to create a fix would be to fork the repository, create a branch in your repository, and make a pull request out of it. +* It is desirable if there is enough comments/documentation and Tests included in the pull request. +* For general idea of contribution, please follow the guidelines mentioned [here](https://guides.github.com/activities/contributing-to-open-source/). + ## More help * [API Reference](https://developer.paypal.com/webapps/developer/docs/api/) diff --git a/composer.json b/composer.json index 4f89af9..c48fc9f 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ "php": ">=5.3.0", "ext-curl": "*", "ext-json": "*", - "paypal/sdk-core-php": "2.4.*" + "paypal/sdk-core-php": "2.5.*" }, "require-dev": { "phpunit/phpunit": "3.7.*" @@ -24,5 +24,5 @@ "psr-0": { "PayPal": "lib/" } - } + } } diff --git a/phpunit.integration.xml b/phpunit.integration.xml new file mode 100644 index 0000000..3738b96 --- /dev/null +++ b/phpunit.integration.xml @@ -0,0 +1,32 @@ + + + + + + tests + + + + + + + + + + + + ./lib + + + + + \ No newline at end of file diff --git a/phpunit.xml b/phpunit.xml index 3738b96..d298fb2 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -15,6 +15,12 @@ + + + integration + + + =5.3.0", - "ext-curl": "*", - "ext-json": "*", - "paypal/rest-api-sdk-php" : "0.8.*" - } -} diff --git a/sample/payments/CreatePayment.php b/sample/payments/CreatePayment.php index 34ed64b..36ec3d8 100644 --- a/sample/payments/CreatePayment.php +++ b/sample/payments/CreatePayment.php @@ -24,12 +24,12 @@ use PayPal\Api\Transaction; // used to fund a payment. $card = new CreditCard(); $card->setType("visa") - ->setNumber("4417119669820331") - ->setExpireMonth("11") - ->setExpireYear("2019") - ->setCvv2("012") - ->setFirstName("Joe") - ->setLastName("Shopper"); + ->setNumber("4417119669820331") + ->setExpireMonth("11") + ->setExpireYear("2019") + ->setCvv2("012") + ->setFirstName("Joe") + ->setLastName("Shopper"); // ### FundingInstrument // A resource representing a Payer's funding instrument. @@ -44,21 +44,25 @@ $fi->setCreditCard($card); // to 'credit_card' and add an array of funding instruments. $payer = new Payer(); $payer->setPaymentMethod("credit_card") - ->setFundingInstruments(array($fi)); + ->setFundingInstruments(array($fi)); // ### Itemized information // (Optional) Lets you specify item wise // information $item1 = new Item(); $item1->setName('Ground Coffee 40 oz') - ->setCurrency('USD') - ->setQuantity(1) - ->setPrice('7.50'); + ->setDescription('Ground Coffee 40 oz') + ->setCurrency('USD') + ->setQuantity(1) + ->setTax('0.30') + ->setPrice('7.50'); $item2 = new Item(); $item2->setName('Granola bars') - ->setCurrency('USD') - ->setQuantity(5) - ->setPrice('2.00'); + ->setDescription('Granola Bars with Peanuts') + ->setCurrency('USD') + ->setQuantity(5) + ->setTax('0.20') + ->setPrice('2.00'); $itemList = new ItemList(); $itemList->setItems(array($item1, $item2)); @@ -69,8 +73,8 @@ $itemList->setItems(array($item1, $item2)); // charges etc. $details = new Details(); $details->setShipping('1.20') - ->setTax('1.30') - ->setSubtotal('17.50'); + ->setTax('1.30') + ->setSubtotal('17.50'); // ### Amount // Lets you specify a payment amount. @@ -78,8 +82,8 @@ $details->setShipping('1.20') // such as shipping, tax. $amount = new Amount(); $amount->setCurrency("USD") - ->setTotal("20.00") - ->setDetails($details); + ->setTotal("20.00") + ->setDetails($details); // ### Transaction // A transaction defines the contract of a @@ -87,39 +91,39 @@ $amount->setCurrency("USD") // is fulfilling it. $transaction = new Transaction(); $transaction->setAmount($amount) - ->setItemList($itemList) - ->setDescription("Payment description"); + ->setItemList($itemList) + ->setDescription("Payment description"); // ### Payment // A Payment Resource; create one using // the above types and intent set to sale 'sale' $payment = new Payment(); $payment->setIntent("sale") - ->setPayer($payer) - ->setTransactions(array($transaction)); + ->setPayer($payer) + ->setTransactions(array($transaction)); // ### Create Payment // Create a payment by calling the payment->create() method // with a valid ApiContext (See bootstrap.php for more on `ApiContext`) // The return object contains the state. try { - $payment->create($apiContext); + $payment->create($apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { - echo "Exception: " . $ex->getMessage() . PHP_EOL; - var_dump($ex->getData()); - exit(1); + echo "Exception: " . $ex->getMessage() . PHP_EOL; + var_dump($ex->getData()); + exit(1); } ?> - Direct Credit card payments + Direct Credit card payments -
- Created payment: - getId();?> -
+
+ Created payment: + getId();?> +
toArray());?>
- Back + Back - + \ No newline at end of file diff --git a/tests/PayPal/Test/Api/AddressTest.php b/tests/PayPal/Test/Api/AddressTest.php index b02dd07..b881b30 100644 --- a/tests/PayPal/Test/Api/AddressTest.php +++ b/tests/PayPal/Test/Api/AddressTest.php @@ -42,7 +42,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase { $this->assertEquals(self::$countryCode, $this->address->getCountryCode()); $this->assertEquals(self::$phone, $this->address->getPhone()); } - + public function testSerializeDeserialize() { $a1 = $this->address; diff --git a/tests/PayPal/Test/Api/AuthorizationTest.php b/tests/PayPal/Test/Api/AuthorizationTest.php index 3f3ea9b..a575044 100644 --- a/tests/PayPal/Test/Api/AuthorizationTest.php +++ b/tests/PayPal/Test/Api/AuthorizationTest.php @@ -122,6 +122,10 @@ class AuthorizationTest extends \PHPUnit_Framework_TestCase { $a2->fromJson($a1->toJson()); $this->assertEquals($a1, $a2); } + + /** + * @group integration + */ public function testOperations() { try { $authId = self::authorize(); @@ -150,13 +154,16 @@ class AuthorizationTest extends \PHPUnit_Framework_TestCase { } catch (\InvalidArgumentException $ex) { $this->assertEquals($ex->getMessage(), "Id cannot be null"); } - } catch (\PayPal\Exception\PPConnectionException $ex) { + } catch (PPConnectionException $ex) { $this->markTestSkipped( 'Tests failing because of intermittent failures in Paypal Sandbox environment.' . $ex->getMessage() ); } } - + + /** + * @group integration + */ public function testReauthorize() { $authorization = Authorization::get('7GH53639GA425732B'); diff --git a/tests/PayPal/Test/Api/CaptureTest.php b/tests/PayPal/Test/Api/CaptureTest.php index a1162fd..7991e44 100644 --- a/tests/PayPal/Test/Api/CaptureTest.php +++ b/tests/PayPal/Test/Api/CaptureTest.php @@ -55,33 +55,42 @@ class CaptureTest extends \PHPUnit_Framework_TestCase { $this->assertEquals($c1, $c2); } - + + /** + * @group integration + */ public function testOperations() { - $authId = AuthorizationTest::authorize(); - $auth = Authorization::get($authId); - - $amount = new Amount(); - $amount->setCurrency("USD"); - $amount->setTotal("1.00"); - - $captr = new Capture(); - $captr->setId($authId); - $captr->setAmount($amount); - - $capt = $auth->capture($captr); - $captureId = $capt->getId(); - $this->assertNotNull($captureId); - - $refund = new Refund(); - $refund->setId($captureId); - $refund->setAmount($amount); - - $capture = Capture::get($captureId); - $this->assertNotNull($capture->getId()); - - $retund = $capture->refund($refund); - $this->assertNotNull($retund->getId()); + try { + $authId = AuthorizationTest::authorize(); + $auth = Authorization::get($authId); + + $amount = new Amount(); + $amount->setCurrency("USD"); + $amount->setTotal("1.00"); + + $captr = new Capture(); + $captr->setId($authId); + $captr->setAmount($amount); + + $capt = $auth->capture($captr); + $captureId = $capt->getId(); + $this->assertNotNull($captureId); + + $refund = new Refund(); + $refund->setId($captureId); + $refund->setAmount($amount); + + $capture = Capture::get($captureId); + $this->assertNotNull($capture->getId()); + + $retund = $capture->refund($refund); + $this->assertNotNull($retund->getId()); + } catch (PPConnectionException $ex) { + $this->markTestSkipped( + 'Tests failing because of intermittent failures in Paypal Sandbox environment.' . $ex->getMessage() + ); + } } } \ No newline at end of file diff --git a/tests/PayPal/Test/Api/CreditCardTest.php b/tests/PayPal/Test/Api/CreditCardTest.php index 84cb96b..fd0bb03 100644 --- a/tests/PayPal/Test/Api/CreditCardTest.php +++ b/tests/PayPal/Test/Api/CreditCardTest.php @@ -71,6 +71,9 @@ class CreditCardTest extends \PHPUnit_Framework_TestCase { $this->assertEquals($c1, $c2); } + /** + * @group integration + */ public function testOperations() { $c1 = $this->cards['full']; diff --git a/tests/PayPal/Test/Api/PaymentTest.php b/tests/PayPal/Test/Api/PaymentTest.php index 6e92d23..fd0ce9d 100644 --- a/tests/PayPal/Test/Api/PaymentTest.php +++ b/tests/PayPal/Test/Api/PaymentTest.php @@ -66,6 +66,9 @@ class PaymentTest extends \PHPUnit_Framework_TestCase { $this->assertEquals($p2, $this->payments['full']); } + /** + * @group integration + */ public function testOperations() { $p1 = $this->payments['new']; diff --git a/tests/PayPal/Test/Api/SaleTest.php b/tests/PayPal/Test/Api/SaleTest.php index b4c6972..1794725 100644 --- a/tests/PayPal/Test/Api/SaleTest.php +++ b/tests/PayPal/Test/Api/SaleTest.php @@ -7,6 +7,7 @@ use PayPal\Test\Constants; use PayPal\Test\Api\AmountTest; use PayPal\Test\Api\PaymentTest; use PayPal\Test\Api\LinksTest; +use PayPal\Exception\PPConnectionException; class SaleTest extends \PHPUnit_Framework_TestCase { @@ -51,23 +52,32 @@ class SaleTest extends \PHPUnit_Framework_TestCase { $this->assertEquals($s1, $s2); } - + + /** + * @group integration + */ public function testOperations() { - $payment = PaymentTest::createNewPayment(); - $payment->create(); - - $transactions = $payment->getTransactions(); - $resources = $transactions[0]->getRelatedResources(); - $saleId = $resources[0]->getSale()->getId(); - - $sale = Sale::get($saleId); - $this->assertNotNull($sale); - - $refund = new Refund(); - $refund->setAmount(AmountTest::createAmount()); - $sale->refund($refund); - - $this->setExpectedException('\InvalidArgumentException'); - $sale->refund(NULL); + try { + $payment = PaymentTest::createNewPayment(); + $payment->create(); + + $transactions = $payment->getTransactions(); + $resources = $transactions[0]->getRelatedResources(); + $saleId = $resources[0]->getSale()->getId(); + + $sale = Sale::get($saleId); + $this->assertNotNull($sale); + + $refund = new Refund(); + $refund->setAmount(AmountTest::createAmount()); + $sale->refund($refund); + + $this->setExpectedException('\InvalidArgumentException'); + $sale->refund(NULL); + } catch (PPConnectionException $ex) { + $this->markTestSkipped( + 'Tests failing because of intermittent failures in Paypal Sandbox environment.' . $ex->getMessage() + ); + } } } \ No newline at end of file diff --git a/tests/sdk_config.ini b/tests/sdk_config.ini index f73b92a..10bcb6e 100644 --- a/tests/sdk_config.ini +++ b/tests/sdk_config.ini @@ -23,13 +23,13 @@ service.EndPoint="https://api.sandbox.paypal.com" log.LogEnabled=true -# When using a relative path, the log file is created -# relative to the .php file that is the entry point -# for this request. You can also provide an absolute -# path here +; When using a relative path, the log file is created +; relative to the .php file that is the entry point +; for this request. You can also provide an absolute +; path here log.FileName=PayPal.log -# Logging level can be one of FINE, INFO, WARN or ERROR -# Logging is most verbose in the 'FINE' level and -# decreases as you proceed towards ERROR +; Logging level can be one of FINE, INFO, WARN or ERROR +; Logging is most verbose in the 'FINE' level and +; decreases as you proceed towards ERROR log.LogLevel=FINE