219 lines
7.8 KiB
PHP
Executable File
219 lines
7.8 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Omnipay\PayPal;
|
|
|
|
use Omnipay\Tests\GatewayTestCase;
|
|
|
|
class ExpressGatewayTest extends GatewayTestCase
|
|
{
|
|
/**
|
|
* @var \Omnipay\PayPal\ExpressGateway
|
|
*/
|
|
protected $gateway;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $options;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $voidOptions;
|
|
|
|
public function setUp()
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->gateway = new ExpressGateway($this->getHttpClient(), $this->getHttpRequest());
|
|
|
|
$this->options = array(
|
|
'amount' => '10.00',
|
|
'returnUrl' => 'https://www.example.com/return',
|
|
'cancelUrl' => 'https://www.example.com/cancel',
|
|
);
|
|
$this->voidOptions = array(
|
|
'transactionReference' => 'ASDFASDFASDF',
|
|
);
|
|
}
|
|
|
|
public function testAuthorizeSuccess()
|
|
{
|
|
$this->setMockHttpResponse('ExpressPurchaseSuccess.txt');
|
|
|
|
$response = $this->gateway->authorize($this->options)->send();
|
|
|
|
$this->assertInstanceOf('\Omnipay\PayPal\Message\ExpressAuthorizeResponse', $response);
|
|
$this->assertFalse($response->isPending());
|
|
$this->assertFalse($response->isSuccessful());
|
|
$this->assertTrue($response->isRedirect());
|
|
$this->assertEquals('https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&useraction=commit&token=EC-42721413K79637829', $response->getRedirectUrl());
|
|
}
|
|
|
|
public function testAuthorizeFailure()
|
|
{
|
|
$this->setMockHttpResponse('ExpressPurchaseFailure.txt');
|
|
|
|
$response = $this->gateway->authorize($this->options)->send();
|
|
|
|
$this->assertFalse($response->isPending());
|
|
$this->assertFalse($response->isSuccessful());
|
|
$this->assertFalse($response->isRedirect());
|
|
$this->assertNull($response->getTransactionReference());
|
|
$this->assertSame('This transaction cannot be processed. The amount to be charged is zero.', $response->getMessage());
|
|
}
|
|
|
|
public function testPurchaseSuccess()
|
|
{
|
|
$this->setMockHttpResponse('ExpressPurchaseSuccess.txt');
|
|
|
|
$response = $this->gateway->purchase($this->options)->send();
|
|
|
|
$this->assertInstanceOf('\Omnipay\PayPal\Message\ExpressAuthorizeResponse', $response);
|
|
$this->assertFalse($response->isPending());
|
|
$this->assertFalse($response->isSuccessful());
|
|
$this->assertTrue($response->isRedirect());
|
|
$this->assertEquals('https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&useraction=commit&token=EC-42721413K79637829', $response->getRedirectUrl());
|
|
}
|
|
|
|
public function testPurchaseFailure()
|
|
{
|
|
$this->setMockHttpResponse('ExpressPurchaseFailure.txt');
|
|
|
|
$response = $this->gateway->purchase($this->options)->send();
|
|
|
|
$this->assertFalse($response->isPending());
|
|
$this->assertFalse($response->isSuccessful());
|
|
$this->assertFalse($response->isRedirect());
|
|
$this->assertNull($response->getTransactionReference());
|
|
$this->assertSame('This transaction cannot be processed. The amount to be charged is zero.', $response->getMessage());
|
|
}
|
|
|
|
public function testOrderSuccess()
|
|
{
|
|
$this->setMockHttpResponse('ExpressOrderSuccess.txt');
|
|
|
|
$response = $this->gateway->order($this->options)->send();
|
|
|
|
$this->assertInstanceOf('\Omnipay\PayPal\Message\ExpressAuthorizeResponse', $response);
|
|
$this->assertFalse($response->isPending());
|
|
$this->assertFalse($response->isSuccessful());
|
|
$this->assertTrue($response->isRedirect());
|
|
$this->assertEquals('https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&useraction=commit&token=EC-42721413K79637829', $response->getRedirectUrl());
|
|
}
|
|
|
|
public function testOrderFailure()
|
|
{
|
|
$this->setMockHttpResponse('ExpressOrderFailure.txt');
|
|
|
|
$response = $this->gateway->order($this->options)->send();
|
|
|
|
$this->assertFalse($response->isPending());
|
|
$this->assertFalse($response->isSuccessful());
|
|
$this->assertFalse($response->isRedirect());
|
|
$this->assertNull($response->getTransactionReference());
|
|
$this->assertSame('This transaction cannot be processed. The amount to be charged is zero.', $response->getMessage());
|
|
}
|
|
|
|
public function testVoidSuccess()
|
|
{
|
|
$this->setMockHttpResponse('ExpressVoidSuccess.txt');
|
|
|
|
$response = $this->gateway->void($this->voidOptions)->send();
|
|
|
|
$this->assertInstanceOf('\Omnipay\PayPal\Message\Response', $response);
|
|
$this->assertTrue($response->isSuccessful());
|
|
$this->assertFalse($response->isRedirect());
|
|
$this->assertEquals('ASDFASDFASDF', $response->getTransactionReference());
|
|
}
|
|
|
|
public function testVoidFailure()
|
|
{
|
|
$this->setMockHttpResponse('ExpressVoidFailure.txt');
|
|
|
|
$response = $this->gateway->void($this->voidOptions)->send();
|
|
|
|
$this->assertInstanceOf('\Omnipay\PayPal\Message\Response', $response);
|
|
$this->assertFalse($response->isSuccessful());
|
|
}
|
|
|
|
public function testFetchCheckout()
|
|
{
|
|
$options = array('token' => 'abc123');
|
|
$request = $this->gateway->fetchCheckout($options);
|
|
|
|
$this->assertInstanceOf('\Omnipay\PayPal\Message\ExpressFetchCheckoutRequest', $request);
|
|
$this->assertSame('abc123', $request->getToken());
|
|
}
|
|
|
|
public function testCompletePurchaseFailureRedirect()
|
|
{
|
|
$this->setMockHttpResponse('ExpressCompletePurchaseFailureRedirect.txt');
|
|
|
|
$response = $this->gateway->completePurchase($this->options)->send();
|
|
|
|
$this->assertFalse($response->isPending());
|
|
$this->assertFalse($response->isSuccessful());
|
|
$this->assertTrue($response->isRedirect());
|
|
$this->assertEquals('ASDFASDFASDF', $response->getTransactionReference());
|
|
$this->assertSame('This transaction couldn\'t be completed. Please redirect your customer to PayPal.', $response->getMessage());
|
|
}
|
|
|
|
public function testCompletePurchaseHttpOptions()
|
|
{
|
|
$this->setMockHttpResponse('ExpressPurchaseSuccess.txt');
|
|
|
|
$this->getHttpRequest()->query->replace(array(
|
|
'token' => 'GET_TOKEN',
|
|
'PayerID' => 'GET_PAYERID',
|
|
));
|
|
|
|
$response = $this->gateway->completePurchase(array(
|
|
'amount' => '10.00',
|
|
'currency' => 'EUR',
|
|
))->send();
|
|
|
|
$httpRequests = $this->getMockedRequests();
|
|
$httpRequest = $httpRequests[0];
|
|
parse_str((string)$httpRequest->getBody(), $postData);
|
|
$this->assertSame('GET_TOKEN', $postData['TOKEN']);
|
|
$this->assertSame('GET_PAYERID', $postData['PAYERID']);
|
|
}
|
|
|
|
public function testCompletePurchaseCustomOptions()
|
|
{
|
|
$this->setMockHttpResponse('ExpressPurchaseSuccess.txt');
|
|
|
|
// Those values should not be used if custom token or payerid are passed
|
|
$this->getHttpRequest()->query->replace(array(
|
|
'token' => 'GET_TOKEN',
|
|
'PayerID' => 'GET_PAYERID',
|
|
));
|
|
|
|
$response = $this->gateway->completePurchase(array(
|
|
'amount' => '10.00',
|
|
'currency' => 'EUR',
|
|
'token' => 'CUSTOM_TOKEN',
|
|
'payerid' => 'CUSTOM_PAYERID',
|
|
))->send();
|
|
|
|
$httpRequests = $this->getMockedRequests();
|
|
$httpRequest = $httpRequests[0];
|
|
parse_str((string)$httpRequest->getBody(), $postData);
|
|
$this->assertSame('CUSTOM_TOKEN', $postData['TOKEN']);
|
|
$this->assertSame('CUSTOM_PAYERID', $postData['PAYERID']);
|
|
}
|
|
|
|
public function testTransactionSearch()
|
|
{
|
|
$transactionSearch = $this->gateway->transactionSearch(array(
|
|
'startDate' => '2015-01-01',
|
|
'endDate' => '2015-12-31',
|
|
));
|
|
|
|
$this->assertInstanceOf('\Omnipay\PayPal\Message\ExpressTransactionSearchRequest', $transactionSearch);
|
|
$this->assertInstanceOf('\DateTime', $transactionSearch->getStartDate());
|
|
$this->assertInstanceOf('\DateTime', $transactionSearch->getEndDate());
|
|
}
|
|
}
|