1
0

repo initialized with test cases

This commit is contained in:
moizgillani
2024-09-06 15:38:17 +05:00
parent c9cb1ad04a
commit b20aa829db
754 changed files with 76684 additions and 1 deletions

58
tests/ClientFactory.php Normal file
View File

@@ -0,0 +1,58 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests;
use Core\Types\CallbackCatcher;
use PayPalRESTAPIsLib\Authentication\ClientCredentialsAuthCredentialsBuilder;
use PayPalRESTAPIsLib\Environment;
use PayPalRESTAPIsLib\PayPalRESTAPIsClient;
use PayPalRESTAPIsLib\PayPalRESTAPIsClientBuilder;
class ClientFactory
{
public static function create(CallbackCatcher $httpCallback): PayPalRESTAPIsClient
{
$clientBuilder = PayPalRESTAPIsClientBuilder::init();
$clientBuilder = self::addConfigurationFromEnvironment($clientBuilder);
$clientBuilder = self::addTestConfiguration($clientBuilder);
return $clientBuilder->httpCallback($httpCallback)->build();
}
public static function addTestConfiguration(PayPalRESTAPIsClientBuilder $builder): PayPalRESTAPIsClientBuilder
{
return $builder;
}
public static function addConfigurationFromEnvironment(
PayPalRESTAPIsClientBuilder $builder
): PayPalRESTAPIsClientBuilder {
$timeout = '10000';
$environment = Environment::SANDBOX;
$oAuthClientId = getenv('CLIENT_ID');
$oAuthClientSecret = getenv('CLIENT_SECRET');
if (!empty($timeout) && \is_numeric($timeout)) {
$builder->timeout(intval($timeout));
}
if (!empty($environment)) {
$builder->environment($environment);
}
if (!empty($oAuthClientId) && !empty($oAuthClientSecret)) {
$builder->clientCredentialsAuthCredentials(
ClientCredentialsAuthCredentialsBuilder::init($oAuthClientId, $oAuthClientSecret)
);
}
return $builder;
}
}

View File

@@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\Controllers;
use Core\TestCase\CoreTestCase;
use Core\Types\CallbackCatcher;
use PayPalRESTAPIsLib\PayPalRESTAPIsClient;
use PayPalRESTAPIsLib\Tests\ClientFactory;
use PHPUnit\Framework\TestCase;
class BaseTestController extends TestCase
{
/**
* @var CallbackCatcher Callback
*/
protected static $callbackCatcher;
protected function newTestCase($result): CoreTestCase
{
return new CoreTestCase($this, self::$callbackCatcher, $result);
}
protected static function getClient(): PayPalRESTAPIsClient
{
self::$callbackCatcher = new CallbackCatcher();
return ClientFactory::create(self::$callbackCatcher);
}
}

View File

@@ -0,0 +1,203 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\E2E;
use Exception;
use PayPalRESTAPIsLib\Controllers\OrdersController;
use PayPalRESTAPIsLib\Models\Builders\AmountWithBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderTrackerItemBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderTrackerRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\PatchBuilder;
use PayPalRESTAPIsLib\Models\Builders\PaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletExperienceContextBuilder;
use PayPalRESTAPIsLib\Models\Builders\PurchaseUnitRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\UniversalProductCodeBuilder;
use PayPalRESTAPIsLib\Models\CheckoutPaymentIntent;
use PayPalRESTAPIsLib\Models\Order;
use PayPalRESTAPIsLib\Models\PatchOp;
use PayPalRESTAPIsLib\Models\PayPalExperienceLandingPage;
use PayPalRESTAPIsLib\Models\ShipmentCarrier;
use PayPalRESTAPIsLib\Models\UPCType;
use PayPalRESTAPIsLib\Tests\Controllers\BaseTestController;
use PayPalRESTAPIsLib\Tests\WebDriverUtilities;
class AddShippingTrackerInformationToOrderFlowTest extends BaseTestController
{
/**
* @var OrdersController OrdersController instance
*/
protected static $ordersController;
/**
* Setup test class
*/
public static function setUpBeforeClass(): void
{
$client = parent::getClient();
self::$ordersController = $client->getOrdersController();
}
public function testCreateOrder(): Order
{
$request = [
'body' => OrderRequestBuilder::init(
CheckoutPaymentIntent::CAPTURE,
[
PurchaseUnitRequestBuilder::init(
AmountWithBreakdownBuilder::init(
'USD',
'100.00'
)->build()
)
->referenceId('d9f80740-38f0-11e8-b467-0ed5f89f718b')
->build()
]
)
->paymentSource(
PaymentSourceBuilder::init()
->paypal(
PayPalWalletBuilder::init()
->experienceContext(
PayPalWalletExperienceContextBuilder::init()
->locale('en-US')
->returnUrl('https://example.com/returnUrl')
->cancelUrl('https://example.com/cancelUrl')
->landingPage(PayPalExperienceLandingPage::LOGIN)
->build()
)
->build()
)
->build()
)
->build()
];
$response = self::$ordersController->ordersCreate($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCreateOrder
* @throws Exception
*/
public function testCompletePayment(Order $orderDetail): void
{
$links = $orderDetail->getLinks();
$url = null;
if (isset($links)) {
$url = $links[1]->getHref();
}
$this->assertNotNull($url);
WebDriverUtilities::completePayment($url ?? '');
}
/**
* @depends testCreateOrder
* @depends testCompletePayment
*/
public function testCaptureOrder(Order $orderDetail): Order
{
$request = [
'id' => $orderDetail->getId(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersCapture($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCaptureOrder
*/
public function testCreateOrderTrack(Order $captureDetail): Order
{
$purchaseUnits = $captureDetail->getPurchaseUnits();
$captureId = null;
if (isset($purchaseUnits)) {
$captures = $purchaseUnits[0]->getPayments()->getCaptures();
if (isset($captures)) {
$captureId = $captures[0]->getId();
}
}
$this->assertNotNull($captureId);
$request = [
'id' => $captureDetail->getId(),
'body' => OrderTrackerRequestBuilder::init($captureId ?? '')
->trackingNumber('443844607820')
->carrier(ShipmentCarrier::FEDEX)
->notifyPayer(false)
->items(
[
OrderTrackerItemBuilder::init()
->name('T-Shirt')
->quantity('1')
->sku('sku02')
->url('https://www.example.com/example')
->imageUrl('https://www.example.com/example.jpg')
->upc(UniversalProductCodeBuilder::init(UPCType::UPCA, 'upc001')->build())
->build()
]
)
->build(),
];
$response = self::$ordersController->ordersTrackCreate($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCreateOrderTrack
*/
public function testUpdateOrderTrack(Order $shippingOrder): void
{
$purchaseUnits = $shippingOrder->getPurchaseUnits();
$trackerId = null;
if (isset($purchaseUnits)) {
$trackers = $purchaseUnits[0]->getShipping()->getTrackers();
if (isset($trackers)) {
$trackerId = $trackers[0]->getId();
}
}
$this->assertNotNull($trackerId);
$request = [
'id' => $shippingOrder->getId(),
'trackerId' => $trackerId ?? '',
'body' => [
PatchBuilder::init(
PatchOp::REPLACE
)
->path('/notify_payer')
->value(true)
->build()
]
];
$response = self::$ordersController->ordersTrackersPatch($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(204, $response->getStatusCode());
}
}

View File

@@ -0,0 +1,220 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\E2E;
use Exception;
use PayPalRESTAPIsLib\Controllers\OrdersController;
use PayPalRESTAPIsLib\Models\Builders\AddressBuilder;
use PayPalRESTAPIsLib\Models\Builders\AmountBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\AmountWithBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\CardAttributesBuilder;
use PayPalRESTAPIsLib\Models\Builders\CardExperienceContextBuilder;
use PayPalRESTAPIsLib\Models\Builders\CardRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\CardVerificationBuilder;
use PayPalRESTAPIsLib\Models\Builders\ItemBuilder;
use PayPalRESTAPIsLib\Models\Builders\MoneyBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderCaptureRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderCaptureRequestPaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\PurchaseUnitRequestBuilder;
use PayPalRESTAPIsLib\Models\CardVerificationMethod;
use PayPalRESTAPIsLib\Models\CheckoutPaymentIntent;
use PayPalRESTAPIsLib\Models\Order;
use PayPalRESTAPIsLib\Tests\Controllers\BaseTestController;
use PayPalRESTAPIsLib\Tests\WebDriverUtilities;
class AuthenticationMultiStepFlowTest extends BaseTestController
{
/**
* @var OrdersController OrdersController instance
*/
protected static $ordersController;
/**
* Setup test class
*/
public static function setUpBeforeClass(): void
{
$client = parent::getClient();
self::$ordersController = $client->getOrdersController();
}
public function testCreateOrder(): Order
{
$request = [
'body' => OrderRequestBuilder::init(
CheckoutPaymentIntent::CAPTURE,
[
PurchaseUnitRequestBuilder::init(
AmountWithBreakdownBuilder::init(
'USD',
'10.00'
)
->breakdown(
AmountBreakdownBuilder::init()
->itemTotal(
MoneyBuilder::init(
'USD',
'10.00'
)->build()
)->build()
)->build()
)
->description('Camera Shop')
->customId('testcustom_id')
->invoiceId('invoice_number_' . rand(1, 99999999999))
->items([
ItemBuilder::init(
'Levis 501 Selvedge STF',
MoneyBuilder::init(
'USD',
'5.00'
)->build(),
'1'
)
->tax(MoneyBuilder::init(
'USD',
'0.00'
)->build())
->sku('5158936')
->build(),
ItemBuilder::init(
'T-Shirt',
MoneyBuilder::init(
'USD',
'5.00'
)->build(),
'1'
)
->tax(MoneyBuilder::init(
'USD',
'0.00'
)->build())
->sku('1457432')
->build()
])
->build()
]
)->build(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'payPalPartnerAttributionId' => 'PayPal-Partner-Attribution-Id',
'payPalClientMetadataId' => 'PayPal-Client-Metadata-Id',
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersCreate($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCreateOrder
*/
public function testCaptureOrder(Order $orderDetail): ?string
{
$request = [
'id' => $orderDetail->getId(),
'prefer' => 'return=representation',
'body' => OrderCaptureRequestBuilder::init()
->paymentSource(
OrderCaptureRequestPaymentSourceBuilder::init()
->card(
CardRequestBuilder::init()
->name('John Doe')
->number('4868719460707704')
->expiry('2027-02')
->billingAddress(
AddressBuilder::init(
'US'
)
->addressLine1('2211 N First Street')
->adminArea1('CA')
->adminArea2('San Jose')
->postalCode('95131')
->build()
)
->attributes(
CardAttributesBuilder::init()
->verification(
CardVerificationBuilder::init()
->method(CardVerificationMethod::SCA_ALWAYS)
->build()
)
->build()
)
->experienceContext(CardExperienceContextBuilder::init()
->returnUrl('https://example.com/returnUrl')
->cancelUrl('https://example.com/cancelUrl')
->build())
->build()
)
->build()
)
->build()
];
$response = self::$ordersController->ordersCapture($request);
// TODO: Verify status 422, as its currently considered as a success case
$this->assertTrue($response->isError());
$this->assertEquals(422, $response->getStatusCode());
return $response->getResult()['links'][0]->href;
}
/**
* @depends testCaptureOrder
* @throws Exception
*/
public function testCompleteHeliosVerification(?string $href): void
{
$this->assertNotNull($href);
WebDriverUtilities::completeHeliosVerification($href ?? '');
}
/**
* @depends testCreateOrder
* @depends testCompleteHeliosVerification
*/
public function testCaptureOrderAgain(Order $orderDetail): void
{
$request = [
'id' => $orderDetail->getId(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersCapture($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
}
/**
* @depends testCreateOrder
* @depends testCaptureOrderAgain
*/
public function testGetOrderDetails(Order $orderDetail): void
{
$request = [
'id' => $orderDetail->getId()
];
$response = self::$ordersController->ordersGet($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals('COMPLETED', $response->getResult()->getStatus());
}
}

View File

@@ -0,0 +1,205 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\E2E;
use Exception;
use PayPalRESTAPIsLib\Controllers\OrdersController;
use PayPalRESTAPIsLib\Models\Builders\AddressBuilder;
use PayPalRESTAPIsLib\Models\Builders\AmountBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\AmountWithBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\CardAttributesBuilder;
use PayPalRESTAPIsLib\Models\Builders\CardExperienceContextBuilder;
use PayPalRESTAPIsLib\Models\Builders\CardRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\CardVerificationBuilder;
use PayPalRESTAPIsLib\Models\Builders\ItemBuilder;
use PayPalRESTAPIsLib\Models\Builders\MoneyBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\PaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\PurchaseUnitRequestBuilder;
use PayPalRESTAPIsLib\Models\CardVerificationMethod;
use PayPalRESTAPIsLib\Models\CheckoutPaymentIntent;
use PayPalRESTAPIsLib\Models\Order;
use PayPalRESTAPIsLib\Tests\Controllers\BaseTestController;
use PayPalRESTAPIsLib\Tests\WebDriverUtilities;
class AuthenticationSingleStepFlowTest extends BaseTestController
{
/**
* @var OrdersController OrdersController instance
*/
protected static $ordersController;
/**
* Setup test class
*/
public static function setUpBeforeClass(): void
{
$client = parent::getClient();
self::$ordersController = $client->getOrdersController();
}
public function testCreateOrder(): Order
{
$request = [
'body' => OrderRequestBuilder::init(
CheckoutPaymentIntent::CAPTURE,
[
PurchaseUnitRequestBuilder::init(
AmountWithBreakdownBuilder::init(
'USD',
'10.00'
)
->breakdown(
AmountBreakdownBuilder::init()
->itemTotal(
MoneyBuilder::init(
'USD',
'10.00'
)->build()
)->build()
)->build()
)
->description('Camera Shop')
->customId('testcustom_id')
->invoiceId('invoice_number_' . rand(1, 99999999999))
->items([
ItemBuilder::init(
'Levis 501 Selvedge STF',
MoneyBuilder::init(
'USD',
'5.00'
)->build(),
'1'
)
->tax(MoneyBuilder::init(
'USD',
'0.00'
)->build())
->sku('5158936')
->build(),
ItemBuilder::init(
'T-Shirt',
MoneyBuilder::init(
'USD',
'5.00'
)->build(),
'1'
)
->tax(MoneyBuilder::init(
'USD',
'0.00'
)->build())
->sku('1457432')
->build()
])
->build()
]
)
->paymentSource(
PaymentSourceBuilder::init()
->card(
CardRequestBuilder::init()
->name('John Doe')
->number('4868719995056080')
->expiry('2027-02')
->billingAddress(
AddressBuilder::init(
'US'
)
->addressLine1('2211 N First Street')
->adminArea1('CA')
->adminArea2('San Jose')
->postalCode('95131')
->build()
)
->attributes(
CardAttributesBuilder::init()
->verification(
CardVerificationBuilder::init()
->method(CardVerificationMethod::SCA_ALWAYS)
->build()
)
->build()
)
->experienceContext(CardExperienceContextBuilder::init()
->returnUrl('https://example.com/returnUrl')
->cancelUrl('https://example.com/cancelUrl')
->build())
->build()
)
->build()
)
->build(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'payPalPartnerAttributionId' => 'PayPal-Partner-Attribution-Id',
'payPalClientMetadataId' => 'PayPal-Client-Metadata-Id',
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersCreate($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCreateOrder
* @throws Exception
*/
public function testCompleteHeliosVerification(Order $orderDetail): void
{
$links = $orderDetail->getLinks();
$url = null;
if (isset($links)) {
$url = $links[1]->getHref();
}
$this->assertNotNull($url);
WebDriverUtilities::completeHeliosVerification($url ?? '');
}
/**
* @depends testCreateOrder
* @depends testCompleteHeliosVerification
*/
public function testCaptureOrder(Order $orderDetail): void
{
$request = [
'id' => $orderDetail->getId(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersCapture($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
}
/**
* @depends testCreateOrder
* @depends testCaptureOrder
*/
public function getOrderDetails(Order $orderDetail): void
{
$request = [
'id' => $orderDetail->getId()
];
$response = self::$ordersController->ordersGet($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
$this->assertNotNull($response->getResult()->getPaymentSource());
$this->assertEquals('COMPLETED', $response->getResult()->getStatus());
}
}

View File

@@ -0,0 +1,232 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\E2E;
use Exception;
use PayPalRESTAPIsLib\Controllers\OrdersController;
use PayPalRESTAPIsLib\Controllers\PaymentsController;
use PayPalRESTAPIsLib\Models\Builders\AmountBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\AmountWithBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\ItemBuilder;
use PayPalRESTAPIsLib\Models\Builders\MoneyBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\PaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletExperienceContextBuilder;
use PayPalRESTAPIsLib\Models\Builders\PurchaseUnitRequestBuilder;
use PayPalRESTAPIsLib\Models\CapturedPayment;
use PayPalRESTAPIsLib\Models\CheckoutPaymentIntent;
use PayPalRESTAPIsLib\Models\Order;
use PayPalRESTAPIsLib\Models\OrderAuthorizeResponse;
use PayPalRESTAPIsLib\Models\PayPalExperienceLandingPage;
use PayPalRESTAPIsLib\Tests\Controllers\BaseTestController;
use PayPalRESTAPIsLib\Tests\WebDriverUtilities;
class AuthorizeAndCaptureFlowTest extends BaseTestController
{
/**
* @var OrdersController OrdersController instance
*/
protected static $ordersController;
/**
* @var PaymentsController PaymentsController instance
*/
protected static $paymentsController;
/**
* Setup test class
*/
public static function setUpBeforeClass(): void
{
$client = parent::getClient();
self::$ordersController = $client->getOrdersController();
self::$paymentsController = $client->getPaymentsController();
}
public function testCreateOrder(): Order
{
$request = [
'body' => OrderRequestBuilder::init(
CheckoutPaymentIntent::AUTHORIZE,
[
PurchaseUnitRequestBuilder::init(
AmountWithBreakdownBuilder::init(
'USD',
'25.00'
)
->breakdown(
AmountBreakdownBuilder::init()
->itemTotal(
MoneyBuilder::init(
'USD',
'25.00'
)->build()
)
->shipping(
MoneyBuilder::init(
'USD',
'0'
)->build()
)
->taxTotal(
MoneyBuilder::init(
'USD',
'0'
)->build()
)
->build()
)->build()
)
->description('Clothing Shop')
->items([
ItemBuilder::init(
'Levis 501',
MoneyBuilder::init(
'USD',
'25.00'
)->build(),
'1'
)
->tax(
MoneyBuilder::init(
'USD',
'0.00'
)->build()
)
->sku('5158936')
->build()
])
->build()
]
)
->paymentSource(
PaymentSourceBuilder::init()
->paypal(
PayPalWalletBuilder::init()
->experienceContext(
PayPalWalletExperienceContextBuilder::init()
->locale('en-US')
->returnUrl('https://example.com/returnUrl')
->cancelUrl('https://example.com/cancelUrl')
->landingPage(PayPalExperienceLandingPage::LOGIN)
->build()
)
->build()
)
->build()
)
->build()
];
$response = self::$ordersController->ordersCreate($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCreateOrder
* @throws Exception
*/
public function testCompletePayment(Order $orderDetail): void
{
$links = $orderDetail->getLinks();
$url = null;
if (isset($links)) {
$url = $links[1]->getHref();
}
$this->assertNotNull($url);
WebDriverUtilities::completePayment($url ?? '');
}
/**
* @depends testCreateOrder
* @depends testCompletePayment
*/
public function testAuthorizeOrder(Order $orderDetail): OrderAuthorizeResponse
{
$request = [
'id' => $orderDetail->getId(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersAuthorize($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testAuthorizeOrder
*/
public function testCaptureAuthorization(OrderAuthorizeResponse $authorizeResponse): CapturedPayment
{
$purchaseUnits = $authorizeResponse->getPurchaseUnits();
$authorizationId = null;
if (isset($purchaseUnits)) {
$authorizations = $purchaseUnits[0]->getPayments()->getAuthorizations();
if (isset($authorizations)) {
$authorizationId = $authorizations[0]->getId();
}
}
$this->assertNotNull($authorizationId);
$request = [
'authorizationId' => $authorizationId,
'prefer' => 'return=representation'
];
$response = self::$paymentsController->authorizationsCapture($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testAuthorizeOrder
*/
public function testGetAuthorization(OrderAuthorizeResponse $authorizeResponse): void
{
$purchaseUnits = $authorizeResponse->getPurchaseUnits();
$authorizationId = null;
if (isset($purchaseUnits)) {
$authorizations = $purchaseUnits[0]->getPayments()->getAuthorizations();
if (isset($authorizations)) {
$authorizationId = $authorizations[0]->getId();
}
}
$this->assertNotNull($authorizationId);
$response = self::$paymentsController->authorizationsGet($authorizationId ?? '');
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals('CAPTURED', $response->getResult()->getStatus());
}
/**
* @depends testCaptureAuthorization
*/
public function testCapturePayment(CapturedPayment $capturedPayment): void
{
$response = self::$paymentsController->capturesGet($capturedPayment->getId() ?? '');
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals('COMPLETED', $response->getResult()->getStatus());
}
}

View File

@@ -0,0 +1,169 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\E2E;
use Exception;
use PayPalRESTAPIsLib\Controllers\OrdersController;
use PayPalRESTAPIsLib\Models\Builders\AmountWithBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\ConfirmOrderRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\NameBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\PaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletExperienceContextBuilder;
use PayPalRESTAPIsLib\Models\Builders\PurchaseUnitRequestBuilder;
use PayPalRESTAPIsLib\Models\CheckoutPaymentIntent;
use PayPalRESTAPIsLib\Models\Order;
use PayPalRESTAPIsLib\Models\PayeePaymentMethodPreference;
use PayPalRESTAPIsLib\Models\PayPalExperienceLandingPage;
use PayPalRESTAPIsLib\Models\PayPalExperienceUserAction;
use PayPalRESTAPIsLib\Models\ShippingPreference;
use PayPalRESTAPIsLib\Tests\Controllers\BaseTestController;
use PayPalRESTAPIsLib\Tests\WebDriverUtilities;
class ConfirmOrderFlowTest extends BaseTestController
{
/**
* @var OrdersController OrdersController instance
*/
protected static $ordersController;
/**
* Setup test class
*/
public static function setUpBeforeClass(): void
{
$client = parent::getClient();
self::$ordersController = $client->getOrdersController();
}
public function testCreateOrder(): Order
{
$request = [
'body' => OrderRequestBuilder::init(
CheckoutPaymentIntent::CAPTURE,
[
PurchaseUnitRequestBuilder::init(
AmountWithBreakdownBuilder::init(
'USD',
'100.00'
)->build()
)
->referenceId('d9f80740-38f0-11e8-b467-0ed5f89f718b')
->build()
]
)
->paymentSource(
PaymentSourceBuilder::init()
->paypal(
PayPalWalletBuilder::init()
->experienceContext(
PayPalWalletExperienceContextBuilder::init()
->locale('en-US')
->returnUrl('https://example.com/returnUrl')
->cancelUrl('https://example.com/cancelUrl')
->landingPage(PayPalExperienceLandingPage::LOGIN)
->build()
)
->build()
)
->build()
)
->build(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersCreate($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCreateOrder
*/
public function testConfirmOrder(Order $orderDetail): Order
{
$request = [
'id' => $orderDetail->getId(),
'prefer' => 'return=representation',
'body' => ConfirmOrderRequestBuilder::init(
PaymentSourceBuilder::init()
->paypal(
PayPalWalletBuilder::init()
->emailAddress('customer@example.com')
->name(
NameBuilder::init()
->givenName('John')
->surname('Doe')
->build()
)
->experienceContext(
PayPalWalletExperienceContextBuilder::init()
->brandName('EXAMPLE INC')
->locale('en-US')
->shippingPreference(ShippingPreference::SET_PROVIDED_ADDRESS)
->returnUrl('https://example.com/returnUrl')
->cancelUrl('https://example.com/cancelUrl')
->landingPage(PayPalExperienceLandingPage::LOGIN)
->userAction(PayPalExperienceUserAction::PAY_NOW)
->paymentMethodPreference(PayeePaymentMethodPreference::IMMEDIATE_PAYMENT_REQUIRED)
->build()
)->build()
)->build()
)->build()
];
$response = self::$ordersController->ordersConfirm($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testConfirmOrder
* @throws Exception
*/
public function testCompletePayment(Order $orderDetail): void
{
$links = $orderDetail->getLinks();
$url = null;
if (isset($links)) {
$url = $links[1]->getHref();
}
$this->assertNotNull($url);
WebDriverUtilities::completePayment($url ?? '');
}
/**
* @depends testCreateOrder
* @depends testCompletePayment
*/
public function testCaptureOrder(Order $orderDetail): void
{
$request = [
'id' => $orderDetail->getId(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersCapture($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
$this->assertEquals('COMPLETED', $response->getResult()->getStatus());
}
}

View File

@@ -0,0 +1,210 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\E2E;
use PayPalRESTAPIsLib\Controllers\OrdersController;
use PayPalRESTAPIsLib\Models\Builders\AddressBuilder;
use PayPalRESTAPIsLib\Models\Builders\AmountBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\AmountWithBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\ItemBuilder;
use PayPalRESTAPIsLib\Models\Builders\MoneyBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\PatchBuilder;
use PayPalRESTAPIsLib\Models\Builders\PaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletExperienceContextBuilder;
use PayPalRESTAPIsLib\Models\Builders\PurchaseUnitRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\ShippingDetailsBuilder;
use PayPalRESTAPIsLib\Models\CheckoutPaymentIntent;
use PayPalRESTAPIsLib\Models\Order;
use PayPalRESTAPIsLib\Models\PatchOp;
use PayPalRESTAPIsLib\Models\PayPalExperienceLandingPage;
use PayPalRESTAPIsLib\Tests\Controllers\BaseTestController;
class PatchOrderFlowTest extends BaseTestController
{
/**
* @var OrdersController OrdersController instance
*/
protected static $ordersController;
/**
* Setup test class
*/
public static function setUpBeforeClass(): void
{
$client = parent::getClient();
self::$ordersController = $client->getOrdersController();
}
public function testCreateOrder(): Order
{
$request = [
'body' => OrderRequestBuilder::init(
CheckoutPaymentIntent::CAPTURE,
[
PurchaseUnitRequestBuilder::init(
AmountWithBreakdownBuilder::init(
'USD',
'10.00'
)
->breakdown(
AmountBreakdownBuilder::init()
->itemTotal(
MoneyBuilder::init(
'USD',
'10.00'
)->build()
)
->shipping(
MoneyBuilder::init(
'USD',
'0.00'
)->build()
)
->taxTotal(
MoneyBuilder::init(
'USD',
'0'
)->build()
)->build()
)->build()
)
->description('Camera Shop')
->items([
ItemBuilder::init(
'Levis 501 Selvedge STF',
MoneyBuilder::init(
'USD',
'5.00'
)->build(),
'1'
)
->tax(MoneyBuilder::init(
'USD',
'0.00'
)->build())
->sku('5158936')
->build(),
ItemBuilder::init(
'T-Shirt',
MoneyBuilder::init(
'USD',
'5.00'
)->build(),
'1'
)
->tax(MoneyBuilder::init(
'USD',
'0.00'
)->build())
->sku('1457432')
->build()
])
->shipping(
ShippingDetailsBuilder::init()
->address(
AddressBuilder::init(
'US'
)
->addressLine1('123 Main Street')
->adminArea1('CA')
->adminArea2('San Jose')
->postalCode('95131')
->build()
)->build()
)->build()
]
)
->paymentSource(
PaymentSourceBuilder::init()
->paypal(
PayPalWalletBuilder::init()
->experienceContext(
PayPalWalletExperienceContextBuilder::init()
->locale('en-US')
->returnUrl('https://example.com/returnUrl')
->cancelUrl('https://example.com/cancelUrl')
->landingPage(PayPalExperienceLandingPage::LOGIN)
->build()
)
->build()
)
->build()
)
->build(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersCreate($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCreateOrder
*/
public function testPatchOrder(Order $orderDetail): void
{
$request = [
'id' => $orderDetail->getId(),
'body' => [
PatchBuilder::init(
PatchOp::REPLACE
)
->path("/purchase_units/@reference_id==d'default'/shipping/address")
->value([
'address_line_1' => '1234 Main St',
'address_line_2' => 'Floor 6',
'admin_area_2' => 'San Francisco',
'admin_area_1' => 'CA',
'postal_code' => '94107',
'country_code' => 'US',
])
->build()
]
];
$response = self::$ordersController->ordersPatch($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(204, $response->getStatusCode());
}
/**
* @depends testCreateOrder
* @depends testPatchOrder
*/
public function testGetOrderDetails(Order $orderDetail): void
{
$request = [
'id' => $orderDetail->getId()
];
$response = self::$ordersController->ordersGet($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals(
'1234 Main St',
$response->getResult()
->getPurchaseUnits()[0]
->getShipping()
->getAddress()
->getAddressLine1()
);
}
}

View File

@@ -0,0 +1,169 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\E2E;
use Exception;
use PayPalRESTAPIsLib\Controllers\OrdersController;
use PayPalRESTAPIsLib\Models\Builders\AddressBuilder;
use PayPalRESTAPIsLib\Models\Builders\AmountBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\AmountWithBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\ItemBuilder;
use PayPalRESTAPIsLib\Models\Builders\MoneyBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\PaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletAttributesBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletExperienceContextBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletVaultInstructionBuilder;
use PayPalRESTAPIsLib\Models\Builders\PurchaseUnitRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\ShippingDetailsBuilder;
use PayPalRESTAPIsLib\Models\CheckoutPaymentIntent;
use PayPalRESTAPIsLib\Models\Order;
use PayPalRESTAPIsLib\Models\PayPalPaymentTokenUsageType;
use PayPalRESTAPIsLib\Models\ShippingPreference;
use PayPalRESTAPIsLib\Models\StoreInVaultInstruction;
use PayPalRESTAPIsLib\Tests\Controllers\BaseTestController;
use PayPalRESTAPIsLib\Tests\WebDriverUtilities;
class PaymentMethodWithPurchaseFlowTest extends BaseTestController
{
/**
* @var OrdersController OrdersController instance
*/
protected static $ordersController;
/**
* Setup test class
*/
public static function setUpBeforeClass(): void
{
$client = parent::getClient();
self::$ordersController = $client->getOrdersController();
}
public function testCreateOrder(): Order
{
$request = [
'body' => OrderRequestBuilder::init(
CheckoutPaymentIntent::CAPTURE,
[
PurchaseUnitRequestBuilder::init(
AmountWithBreakdownBuilder::init(
'USD',
'10.00'
)
->breakdown(
AmountBreakdownBuilder::init()
->itemTotal(
MoneyBuilder::init(
'USD',
'10.00'
)->build()
)
->build()
)->build()
)
->description('Camera Shop')
->items([
ItemBuilder::init(
'Camera',
MoneyBuilder::init(
'USD',
'10.00'
)->build(),
'1'
)->build()
])
->shipping(
ShippingDetailsBuilder::init()
->address(
AddressBuilder::init(
'US'
)
->addressLine1('500 Main Street')
->addressLine2('#1000')
->adminArea1('CA')
->adminArea2('San Jose')
->postalCode('95131')
->build()
)->build()
)->build()
]
)
->paymentSource(
PaymentSourceBuilder::init()
->paypal(
PayPalWalletBuilder::init()
->attributes(PayPalWalletAttributesBuilder::init()
->vault(
PayPalWalletVaultInstructionBuilder::init(
PayPalPaymentTokenUsageType::MERCHANT
)
->storeInVault(StoreInVaultInstruction::ON_SUCCESS)
->build()
)->build())
->experienceContext(
PayPalWalletExperienceContextBuilder::init()
->shippingPreference(ShippingPreference::SET_PROVIDED_ADDRESS)
->returnUrl('https://example.com/returnUrl')
->cancelUrl('https://example.com/cancelUrl')
->build()
)
->build()
)
->build()
)
->build(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersCreate($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCreateOrder
* @throws Exception
*/
public function testCompletePayment(Order $orderDetail): void
{
$links = $orderDetail->getLinks();
$url = null;
if (isset($links)) {
$url = $links[1]->getHref();
}
$this->assertNotNull($url);
WebDriverUtilities::completePayment($url ?? '');
}
/**
* @depends testCreateOrder
* @depends testCompletePayment
*/
public function testCaptureOrder(Order $orderDetail): void
{
$request = [
'id' => $orderDetail->getId(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersCapture($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
}
}

View File

@@ -0,0 +1,231 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\E2E;
use Exception;
use PayPalRESTAPIsLib\Controllers\OrdersController;
use PayPalRESTAPIsLib\Controllers\VaultController;
use PayPalRESTAPIsLib\Models\Builders\AddressBuilder;
use PayPalRESTAPIsLib\Models\Builders\AmountBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\AmountWithBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\ItemBuilder;
use PayPalRESTAPIsLib\Models\Builders\MoneyBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\PaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\PaymentTokenRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\PaymentTokenRequestPaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletBuilder;
use PayPalRESTAPIsLib\Models\Builders\PurchaseUnitRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\SetupTokenRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\SetupTokenRequestPaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\ShippingDetailsBuilder;
use PayPalRESTAPIsLib\Models\Builders\VaultExperienceContextBuilder;
use PayPalRESTAPIsLib\Models\Builders\VaultPayPalWalletRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\VaultTokenRequestBuilder;
use PayPalRESTAPIsLib\Models\CheckoutPaymentIntent;
use PayPalRESTAPIsLib\Models\PaymentTokenResponse;
use PayPalRESTAPIsLib\Models\SetupTokenResponse;
use PayPalRESTAPIsLib\Models\TokenType;
use PayPalRESTAPIsLib\Tests\Controllers\BaseTestController;
use PayPalRESTAPIsLib\Tests\WebDriverUtilities;
class PaymentMethodWithoutPurchaseFlowTest extends BaseTestController
{
/**
* @var OrdersController OrdersController instance
*/
protected static $ordersController;
/**
* @var VaultController VaultController instance
*/
protected static $vaultController;
/**
* Setup test class
*/
public static function setUpBeforeClass(): void
{
$client = parent::getClient();
self::$ordersController = $client->getOrdersController();
self::$vaultController = $client->getVaultController();
}
public function testCreateSetupToken(): SetupTokenResponse
{
$request = [
'payPalRequestId' => strval(rand(1, 99999999999)),
'body' => SetupTokenRequestBuilder::init(
SetupTokenRequestPaymentSourceBuilder::init()
->paypal(
VaultPayPalWalletRequestBuilder::init()
->description('Description for PayPal to be shown to PayPal payer')
->permitMultiplePaymentTokens(true)
->usageType('MERCHANT')
->customerType('CONSUMER')
->experienceContext(
VaultExperienceContextBuilder::init()
->returnUrl('https://example.com/returnUrl')
->cancelUrl('https://example.com/cancelUrl')
->build()
)
->build()
)->build()
)->build()
];
$response = self::$vaultController->setupTokensCreate($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCreateSetupToken
* @throws Exception
*/
public function testSavePaymentMethod(SetupTokenResponse $setupTokenDetail): void
{
$links = $setupTokenDetail->getLinks();
$url = null;
if (isset($links)) {
$url = $links[1]->getHref();
}
$this->assertNotNull($url);
WebDriverUtilities::savePaymentMethod($url ?? '');
}
/**
* @depends testCreateSetupToken
* @depends testSavePaymentMethod
*/
public function testCreatePaymentToken(SetupTokenResponse $setupTokenResponse): PaymentTokenResponse
{
$request = [
'payPalRequestId' => strval(rand(1, 99999999999)),
'body' => PaymentTokenRequestBuilder::init(
PaymentTokenRequestPaymentSourceBuilder::init()
->token(
VaultTokenRequestBuilder::init(
$setupTokenResponse->getId() ?? '',
TokenType::SETUP_TOKEN
)->build()
)->build()
)->build()
];
$response = self::$vaultController->paymentTokensCreate($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCreatePaymentToken
*/
public function testCreateOrder(PaymentTokenResponse $paymentToken): void
{
$request = [
'body' => OrderRequestBuilder::init(
CheckoutPaymentIntent::CAPTURE,
[
PurchaseUnitRequestBuilder::init(
AmountWithBreakdownBuilder::init(
'USD',
'10.00'
)
->breakdown(
AmountBreakdownBuilder::init()
->itemTotal(
MoneyBuilder::init(
'USD',
'10.00'
)->build()
)->build()
)->build()
)
->description('Camera Shop')
->items([
ItemBuilder::init(
'Camera',
MoneyBuilder::init(
'USD',
'10.00'
)->build(),
'1'
)->build(),
])
->shipping(
ShippingDetailsBuilder::init()
->address(
AddressBuilder::init(
'US'
)
->addressLine1('500 Main Street')
->addressLine2('#1000')
->adminArea1('CA')
->adminArea2('San Jose')
->postalCode('95131')
->build()
)->build()
)->build()
]
)
->paymentSource(
PaymentSourceBuilder::init()
->paypal(
PayPalWalletBuilder::init()
->vaultId($paymentToken->getId())
->build()
)
->build()
)
->build(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersCreate($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
}
/**
* @depends testCreateSetupToken
* @depends testCreateOrder
*/
public function testGetSetupToken(SetupTokenResponse $setupTokenDetail): void
{
$response = self::$vaultController->setupTokensGet($setupTokenDetail->getId() ?? '');
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals('VAULTED', $response->getResult()->getStatus());
}
/**
* @depends testCreatePaymentToken
* @depends testGetSetupToken
*/
public function testGetPaymentToken(PaymentTokenResponse $paymentToken): void
{
$response = self::$vaultController->paymentTokensGet($paymentToken->getId() ?? '');
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
$this->assertNotNull($response);
}
}

View File

@@ -0,0 +1,167 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\E2E;
use Exception;
use PayPalRESTAPIsLib\Controllers\OrdersController;
use PayPalRESTAPIsLib\Controllers\PaymentsController;
use PayPalRESTAPIsLib\Models\Builders\AmountWithBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\PaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletExperienceContextBuilder;
use PayPalRESTAPIsLib\Models\Builders\PurchaseUnitRequestBuilder;
use PayPalRESTAPIsLib\Models\CheckoutPaymentIntent;
use PayPalRESTAPIsLib\Models\Order;
use PayPalRESTAPIsLib\Models\PayPalExperienceLandingPage;
use PayPalRESTAPIsLib\Models\Refund;
use PayPalRESTAPIsLib\Tests\Controllers\BaseTestController;
use PayPalRESTAPIsLib\Tests\WebDriverUtilities;
class RefundFlowTest extends BaseTestController
{
/**
* @var OrdersController OrdersController instance
*/
protected static $ordersController;
/**
* @var PaymentsController PaymentsController instance
*/
protected static $paymentsController;
/**
* Setup test class
*/
public static function setUpBeforeClass(): void
{
$client = parent::getClient();
self::$ordersController = $client->getOrdersController();
self::$paymentsController = $client->getPaymentsController();
}
public function testCreateOrder(): Order
{
$request = [
'body' => OrderRequestBuilder::init(
CheckoutPaymentIntent::CAPTURE,
[
PurchaseUnitRequestBuilder::init(
AmountWithBreakdownBuilder::init(
'USD',
'100.00'
)->build()
)
->referenceId('d9f80740-38f0-11e8-b467-0ed5f89f718b')
->build()
]
)
->paymentSource(
PaymentSourceBuilder::init()
->paypal(
PayPalWalletBuilder::init()
->experienceContext(
PayPalWalletExperienceContextBuilder::init()
->locale('en-US')
->returnUrl('https://example.com/returnUrl')
->cancelUrl('https://example.com/cancelUrl')
->landingPage(PayPalExperienceLandingPage::LOGIN)
->build()
)
->build()
)
->build()
)
->build()
];
$response = self::$ordersController->ordersCreate($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCreateOrder
* @throws Exception
*/
public function testCompletePayment(Order $orderDetail): void
{
$links = $orderDetail->getLinks();
$url = null;
if (isset($links)) {
$url = $links[1]->getHref();
}
$this->assertNotNull($url);
WebDriverUtilities::completePayment($url ?? '');
}
/**
* @depends testCreateOrder
* @depends testCompletePayment
*/
public function testCaptureOrder(Order $orderDetail): Order
{
$request = [
'id' => $orderDetail->getId(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersCapture($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCaptureOrder
*/
public function testRefund(Order $captureDetail): Refund
{
$purchaseUnits = $captureDetail->getPurchaseUnits();
$captureId = null;
if (isset($purchaseUnits)) {
$captures = $purchaseUnits[0]->getPayments()->getCaptures();
if (isset($captures)) {
$captureId = $captures[0]->getId();
}
}
$this->assertNotNull($captureId);
$request = [
'captureId' => $captureId,
'prefer' => 'return=representation'
];
$response = self::$paymentsController->capturesRefund($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testRefund
*/
public function testGetRefund(Refund $refund): void
{
$response = self::$paymentsController->refundsGet($refund->getId() ?? '');
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals('COMPLETED', $response->getResult()->getStatus());
}
}

View File

@@ -0,0 +1,134 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\E2E;
use Exception;
use PayPalRESTAPIsLib\Controllers\OrdersController;
use PayPalRESTAPIsLib\Models\Builders\AmountWithBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\PaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletExperienceContextBuilder;
use PayPalRESTAPIsLib\Models\Builders\PurchaseUnitRequestBuilder;
use PayPalRESTAPIsLib\Models\CheckoutPaymentIntent;
use PayPalRESTAPIsLib\Models\Order;
use PayPalRESTAPIsLib\Models\PayPalExperienceLandingPage;
use PayPalRESTAPIsLib\Tests\Controllers\BaseTestController;
use PayPalRESTAPIsLib\Tests\WebDriverUtilities;
class StandardCheckoutFlowTest extends BaseTestController
{
/**
* @var OrdersController OrdersController instance
*/
protected static $ordersController;
/**
* Setup test class
*/
public static function setUpBeforeClass(): void
{
$client = parent::getClient();
self::$ordersController = $client->getOrdersController();
}
public function testCreateOrder(): Order
{
$request = [
'body' => OrderRequestBuilder::init(
CheckoutPaymentIntent::CAPTURE,
[
PurchaseUnitRequestBuilder::init(
AmountWithBreakdownBuilder::init(
'USD',
'100.00'
)->build()
)
->referenceId('d9f80740-38f0-11e8-b467-0ed5f89f718b')
->build()
]
)
->paymentSource(
PaymentSourceBuilder::init()
->paypal(
PayPalWalletBuilder::init()
->experienceContext(
PayPalWalletExperienceContextBuilder::init()
->locale('en-US')
->returnUrl('https://example.com/returnUrl')
->cancelUrl('https://example.com/cancelUrl')
->landingPage(PayPalExperienceLandingPage::LOGIN)
->build()
)
->build()
)
->build()
)
->build()
];
$response = self::$ordersController->ordersCreate($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCreateOrder
* @throws Exception
*/
public function testCompletePayment(Order $orderDetail): void
{
$links = $orderDetail->getLinks();
$url = null;
if (isset($links)) {
$url = $links[1]->getHref();
}
$this->assertNotNull($url);
WebDriverUtilities::completePayment($url ?? '');
}
/**
* @depends testCreateOrder
* @depends testCompletePayment
*/
public function testCaptureOrder(Order $orderDetail): void
{
$request = [
'id' => $orderDetail->getId(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersCapture($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
}
/**
* @depends testCreateOrder
* @depends testCaptureOrder
*/
public function testGetOrderDetails(Order $orderDetail): void
{
$request = [
'id' => $orderDetail->getId()
];
$response = self::$ordersController->ordersGet($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
}
}

View File

@@ -0,0 +1,197 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\E2E;
use Exception;
use PayPalRESTAPIsLib\Controllers\OrdersController;
use PayPalRESTAPIsLib\Controllers\PaymentsController;
use PayPalRESTAPIsLib\Models\Builders\AmountBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\AmountWithBreakdownBuilder;
use PayPalRESTAPIsLib\Models\Builders\ItemBuilder;
use PayPalRESTAPIsLib\Models\Builders\MoneyBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\PaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletBuilder;
use PayPalRESTAPIsLib\Models\Builders\PayPalWalletExperienceContextBuilder;
use PayPalRESTAPIsLib\Models\Builders\PurchaseUnitRequestBuilder;
use PayPalRESTAPIsLib\Models\CheckoutPaymentIntent;
use PayPalRESTAPIsLib\Models\Order;
use PayPalRESTAPIsLib\Models\OrderAuthorizeResponse;
use PayPalRESTAPIsLib\Models\PayPalExperienceLandingPage;
use PayPalRESTAPIsLib\Tests\Controllers\BaseTestController;
use PayPalRESTAPIsLib\Tests\WebDriverUtilities;
class VoidAuthorizationFlowTest extends BaseTestController
{
/**
* @var OrdersController OrdersController instance
*/
protected static $ordersController;
/**
* @var PaymentsController PaymentsController instance
*/
protected static $paymentsController;
/**
* Setup test class
*/
public static function setUpBeforeClass(): void
{
$client = parent::getClient();
self::$ordersController = $client->getOrdersController();
self::$paymentsController = $client->getPaymentsController();
}
public function testCreateOrder(): Order
{
$request = [
'body' => OrderRequestBuilder::init(
CheckoutPaymentIntent::AUTHORIZE,
[
PurchaseUnitRequestBuilder::init(
AmountWithBreakdownBuilder::init(
'USD',
'25.00'
)
->breakdown(
AmountBreakdownBuilder::init()
->itemTotal(
MoneyBuilder::init(
'USD',
'25.00'
)->build()
)
->shipping(
MoneyBuilder::init(
'USD',
'0'
)->build()
)
->taxTotal(
MoneyBuilder::init(
'USD',
'0'
)->build()
)
->build()
)->build()
)
->description('Clothing Shop')
->items([
ItemBuilder::init(
'Levis 501',
MoneyBuilder::init(
'USD',
'25.00'
)->build(),
'1'
)
->tax(
MoneyBuilder::init(
'USD',
'0.00'
)->build()
)
->sku('5158936')
->build()
])
->build()
]
)
->paymentSource(
PaymentSourceBuilder::init()
->paypal(
PayPalWalletBuilder::init()
->experienceContext(
PayPalWalletExperienceContextBuilder::init()
->locale('en-US')
->returnUrl('https://example.com/returnUrl')
->cancelUrl('https://example.com/cancelUrl')
->landingPage(PayPalExperienceLandingPage::LOGIN)
->build()
)
->build()
)
->build()
)
->build(),
'payPalRequestId' => strval(rand(1, 99999999999))
];
$response = self::$ordersController->ordersCreate($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(200, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testCreateOrder
* @throws Exception
*/
public function testCompletePayment(Order $orderDetail): void
{
$links = $orderDetail->getLinks();
$url = null;
if (isset($links)) {
$url = $links[1]->getHref();
}
$this->assertNotNull($url);
WebDriverUtilities::completePayment($url ?? '');
}
/**
* @depends testCreateOrder
* @depends testCompletePayment
*/
public function testAuthorizeOrder(Order $orderDetail): OrderAuthorizeResponse
{
$request = [
'id' => $orderDetail->getId(),
'payPalRequestId' => strval(rand(1, 99999999999)),
'prefer' => 'return=representation'
];
$response = self::$ordersController->ordersAuthorize($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
return $response->getResult();
}
/**
* @depends testAuthorizeOrder
*/
public function testCaptureAuthorization(OrderAuthorizeResponse $authorizeResponse): void
{
$purchaseUnits = $authorizeResponse->getPurchaseUnits();
$authorizationId = null;
if (isset($purchaseUnits)) {
$authorizations = $purchaseUnits[0]->getPayments()->getAuthorizations();
if (isset($authorizations)) {
$authorizationId = $authorizations[0]->getId();
}
}
$this->assertNotNull($authorizationId);
$request = [
'authorizationId' => $authorizationId,
'prefer' => 'return=representation'
];
$response = self::$paymentsController->authorizationsCapture($request);
$this->assertTrue($response->isSuccess());
$this->assertEquals(201, $response->getStatusCode());
}
}

View File

@@ -0,0 +1,209 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\UnitTests;
use PayPalRESTAPIsLib\Controllers\OrdersController;
use PayPalRESTAPIsLib\Models\Builders\ConfirmOrderRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\OrderTrackerRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\PatchBuilder;
use PayPalRESTAPIsLib\Models\Builders\PaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\CheckoutPaymentIntent;
use PayPalRESTAPIsLib\Models\PatchOp;
use PayPalRESTAPIsLib\Tests\Controllers\BaseTestController;
class OrdersControllerTest extends BaseTestController
{
/**
* @var OrdersController OrdersController instance
*/
protected static $controller;
private const NON_EXISTENT_ORDER_ID = 'id-4';
private const NON_EXISTENT_TRACKER_ID = '5UA89551P20376023-443844607820';
private const ALREADY_CAPTURED_ID = '123';
/**
* Setup test class
*/
public static function setUpBeforeClass(): void
{
self::$controller = parent::getClient()->getOrdersController();
}
public function testOrdersCreateWithStatus400()
{
// Parameters for the API call
$request = [
'body' => OrderRequestBuilder::init(
CheckoutPaymentIntent::CAPTURE,
[]
)->build(),
'payPalRequestId' => 'PayPal-Request-Id',
'payPalPartnerAttributionId' => 'PayPal-Partner-Attribution-Id2',
'payPalClientMetadataId' => 'PayPal-Client-Metadata-Id',
'prefer' => 'return=minimal'
];
// Perform API call
$result = self::$controller->ordersCreate($request);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(400)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testOrdersPatchWithStatus400()
{
// Parameters for the API call
$request = [
'body' => PatchBuilder::init(
PatchOp::ADD
)->build(),
'id' => self::NON_EXISTENT_ORDER_ID,
];
// Perform API call
$result = self::$controller->ordersPatch($request);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(400)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testOrdersGetWithStatus204()
{
// Parameters for the API call
$request = [
'id' => self::NON_EXISTENT_ORDER_ID
];
// Perform API call
$result = self::$controller->ordersPatch($request);
// Assert result with expected response
$this->assertTrue($result->isSuccess());
$this->newTestCase($result->getResult())
->expectStatus(204)
->assert();
}
public function testOrdersConfirmWithStatus404()
{
// Parameters for the API call
$request = [
'body' => ConfirmOrderRequestBuilder::init(
PaymentSourceBuilder::init()->build()
)->build(),
'id' => self::NON_EXISTENT_ORDER_ID,
'prefer' => 'return=minimal'
];
// Perform API call
$result = self::$controller->ordersConfirm($request);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testOrdersAuthorizeWithStatus404()
{
// Parameters for the API call
$request = [
'id' => self::NON_EXISTENT_ORDER_ID,
'prefer' => 'return=minimal'
];
// Perform API call
$result = self::$controller->ordersAuthorize($request);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testOrdersTrackCreateWithStatus404()
{
// Parameters for the API call
$request = [
'id' => self::NON_EXISTENT_ORDER_ID,
'body' => OrderTrackerRequestBuilder::init(
self::ALREADY_CAPTURED_ID
)->notifyPayer(false)->build(),
];
// Perform API call
$result = self::$controller->ordersTrackCreate($request);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(400)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testOrdersTrackersPatchWithStatus404()
{
// Parameters for the API call
$request = [
'id' => self::NON_EXISTENT_ORDER_ID,
'trackerId' => self::NON_EXISTENT_TRACKER_ID,
'body' => [
PatchBuilder::init(
PatchOp::REPLACE
)
->path('/notify_payer')
->value(true)
->build()
]
];
// Perform API call
$result = self::$controller->ordersTrackersPatch($request);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
}

View File

@@ -0,0 +1,208 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\UnitTests;
use PayPalRESTAPIsLib\Controllers\PaymentsController;
use PayPalRESTAPIsLib\Models\Builders\CaptureRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\MoneyBuilder;
use PayPalRESTAPIsLib\Models\Builders\RefundRequestBuilder;
use PayPalRESTAPIsLib\Tests\Controllers\BaseTestController;
class PaymentsControllerTest extends BaseTestController
{
/**
* @var PaymentsController PaymentsController instance
*/
protected static $controller;
private const NON_EXISTENT_AUTHORIZATION_ID = 'authorization_id8';
private const NON_EXISTENT_CAPTURE_ID = 'capture_id';
private const NON_EXISTENT_REFUND_ID = 'refund_id';
private const ALREADY_AUTHORIZED_ID = '3BJ81821K7933911P';
/**
* Setup test class
*/
public static function setUpBeforeClass(): void
{
self::$controller = parent::getClient()->getPaymentsController();
}
public function testAuthorizationsGetWithStatus404()
{
// Perform API call
$result = self::$controller->authorizationsGet(self::NON_EXISTENT_AUTHORIZATION_ID);
$headers = [];
$headers['Content-Type'] = ['application/json;charset=UTF-8', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testCapturesGetWithStatus404()
{
// Perform API call
$result = self::$controller->capturesGet(self::NON_EXISTENT_CAPTURE_ID);
$headers = [];
$headers['Content-Type'] = ['application/json;charset=UTF-8', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testRefundsGetWithStatus404()
{
// Perform API call
$result = self::$controller->refundsGet(self::NON_EXISTENT_REFUND_ID);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testAuthorizationsCaptureWithStatus404()
{
// Parameters for the API call
$request = [
'body' => CaptureRequestBuilder::init()->finalCapture(false)->build(),
'authorizationId' => self::NON_EXISTENT_AUTHORIZATION_ID,
'prefer' => 'return=minimal'
];
// Perform API call
$result = self::$controller->authorizationsCapture($request);
$headers = [];
$headers['Content-Type'] = ['application/json;charset=UTF-8', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testAuthorizationsReauthorizeWithStatus404()
{
// Parameters for the API call
$request = [
'authorizationId' => self::NON_EXISTENT_AUTHORIZATION_ID,
'prefer' => 'return=minimal'
];
// Perform API call
$result = self::$controller->authorizationsReauthorize($request);
$headers = [];
$headers['Content-Type'] = ['application/json;charset=UTF-8', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testAuthorizationsVoidWithStatus404()
{
// Parameters for the API call
$request = [
'authorizationId' => self::NON_EXISTENT_AUTHORIZATION_ID,
'prefer' => 'return=minimal'
];
// Perform API call
$result = self::$controller->authorizationsVoid($request);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testAuthorizationsVoidWithStatus422()
{
// Parameters for the API call
$request = [
'authorizationId' => self::ALREADY_AUTHORIZED_ID,
'prefer' => 'return=minimal'
];
// Perform API call
$result = self::$controller->authorizationsVoid($request);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(422)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testCapturesRefundWithStatus404()
{
// Parameters for the API call
$request = [
'captureId' => self::NON_EXISTENT_CAPTURE_ID,
'prefer' => 'return=minimal',
'body' => RefundRequestBuilder::init()
->amount(
MoneyBuilder::init(
'USD',
'1.44'
)->build()
)
->noteToPayer('Defective product')
->build()
];
// Perform API call
$result = self::$controller->capturesRefund($request);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
}

View File

@@ -0,0 +1,242 @@
<?php
declare(strict_types=1);
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
namespace PayPalRESTAPIsLib\Tests\UnitTests;
use PayPalRESTAPIsLib\Controllers\VaultController;
use PayPalRESTAPIsLib\Models\Builders\PaymentTokenRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\PaymentTokenRequestPaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\SetupTokenRequestBuilder;
use PayPalRESTAPIsLib\Models\Builders\SetupTokenRequestPaymentSourceBuilder;
use PayPalRESTAPIsLib\Models\Builders\VaultTokenRequestBuilder;
use PayPalRESTAPIsLib\Models\TokenType;
use PayPalRESTAPIsLib\Tests\Controllers\BaseTestController;
class VaultControllerTest extends BaseTestController
{
/**
* @var VaultController OrdersController instance
*/
protected static $controller;
private const NON_EXISTENT_SETUP_TOKEN_ID = 'setup-1';
private const NON_EXISTENT_PAYMENT_TOKEN_ID = 'payment-1';
private const NON_EXISTENT_CUSTOMER_ID = 'customer-1';
private const INVALID_ID = "'dw";
/**
* Setup test class
*/
public static function setUpBeforeClass(): void
{
self::$controller = parent::getClient()->getVaultController();
}
public function testSetupTokensCreateWithStatus400()
{
// Parameters for the API call
$request = [
'payPalRequestId' => '',
'body' => SetupTokenRequestBuilder::init(
SetupTokenRequestPaymentSourceBuilder::init()->build()
)->build()
];
// Perform API call
$result = self::$controller->setupTokensCreate($request);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(400)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testPaymentTokensCreateWithStatus404()
{
// Parameters for the API call
$request = [
'body' => PaymentTokenRequestBuilder::init(
PaymentTokenRequestPaymentSourceBuilder::init()->build()
)->build(),
'payPalRequestId' => '',
];
// Perform API call
$result = self::$controller->paymentTokensCreate($request);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testPaymentTokensCreateWithStatus400()
{
// Parameters for the API call
$request = [
'body' => PaymentTokenRequestBuilder::init(
PaymentTokenRequestPaymentSourceBuilder::init()
->token(VaultTokenRequestBuilder::init(self::INVALID_ID, TokenType::SETUP_TOKEN)->build())
->build()
)->build(),
'payPalRequestId' => '',
];
// Perform API call
$result = self::$controller->paymentTokensCreate($request);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(400)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testSetupTokensGetWithStatus404()
{
// Perform API call
$result = self::$controller->setupTokensGet(self::NON_EXISTENT_SETUP_TOKEN_ID);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testSetupTokensGetWithStatus400()
{
// Perform API call
$result = self::$controller->setupTokensGet(self::INVALID_ID);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(400)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testPaymentTokensGetWithStatus404()
{
// Perform API call
$result = self::$controller->paymentTokensGet(self::NON_EXISTENT_PAYMENT_TOKEN_ID);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testPaymentTokensGetWithStatus400()
{
// Perform API call
$result = self::$controller->paymentTokensGet(self::NON_EXISTENT_PAYMENT_TOKEN_ID);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testCustomerPaymentTokensGetWithStatus404()
{
// Parameters for the API call
$request = [
'customerId' => self::NON_EXISTENT_CUSTOMER_ID,
'pageSize' => 5,
'page' => 1,
'totalRequired' => false,
];
// Perform API call
$result = self::$controller->customerPaymentTokensGet($request);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(404)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testCustomerPaymentTokensGetWithStatus400()
{
// Parameters for the API call
$request = [
'customerId' => self::INVALID_ID,
'pageSize' => 5,
'page' => 1,
'totalRequired' => false,
];
// Perform API call
$result = self::$controller->customerPaymentTokensGet($request);
$headers = [];
$headers['Content-Type'] = ['application/json', true];
// Assert result with expected response
$this->assertTrue($result->isError());
$this->newTestCase($result->getResult())
->expectStatus(400)
->allowExtraHeaders()
->expectHeaders($headers)
->assert();
}
public function testPaymentTokensDeleteWithStatus204()
{
// Perform API call
$result = self::$controller->paymentTokensDelete(self::NON_EXISTENT_PAYMENT_TOKEN_ID);
// Assert result with expected response
$this->assertTrue($result->isSuccess());
$this->newTestCase($result->getResult())
->expectStatus(204)
->assert();
}
}

View File

@@ -0,0 +1,212 @@
<?php
namespace PayPalRESTAPIsLib\Tests;
use Exception;
use Facebook\WebDriver\Firefox\FirefoxOptions;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\WebDriverBy;
use Facebook\WebDriver\WebDriverExpectedCondition;
class WebDriverUtilities
{
/**
* @throws Exception
*/
public static function completePayment(string $checkoutUrl): void
{
$email = getenv('EMAIL');
$pass = getenv('PASSWORD');
if (!isset($email) || !isset($pass)) {
throw new Exception('EMAIL or PASSWORD environment variable is not set');
}
$driver = self::getWebDriver();
$driver->get($checkoutUrl);
$elements = $driver->findElements(WebDriverBy::cssSelector('#email'));
if (count($elements) > 0) {
// If not logged in fill in the email
$emailField = $elements[0];
$emailField->clear();
$emailField->sendKeys($email);
$elements = $driver->findElements(WebDriverBy::cssSelector('#btnNext'));
if (count($elements) > 0) {
// Click the Next button if found
$elements[0]->click();
}
// Wait for the login button
$driver->wait(50)->until(
WebDriverExpectedCondition::visibilityOfElementLocated(
WebDriverBy::cssSelector('#btnLogin')
)
);
// Fill in password and login
$driver->findElement(WebDriverBy::cssSelector('#password'))->sendKeys($pass);
$driver->findElement(WebDriverBy::cssSelector('#btnLogin'))->click();
}
// Wait for the payment button
$driver->wait(50)->until(
WebDriverExpectedCondition::visibilityOfElementLocated(
WebDriverBy::cssSelector('#payment-submit-btn')
)
);
// Click on payment submit button
$driver->findElement(WebDriverBy::cssSelector('#payment-submit-btn'))->click();
// Wait for the return URL
$driver->wait(50)->until(
WebDriverExpectedCondition::urlContains('https://example.com/returnUrl')
);
}
/**
* @throws Exception
*/
public static function savePaymentMethod(string $url): void
{
$email = getenv('EMAIL');
$pass = getenv('PASSWORD');
if (!isset($email) || !isset($pass)) {
throw new Exception('EMAIL or PASSWORD environment variable is not set');
}
$driver = self::getWebDriver();
$driver->get($url);
$elements = $driver->findElements(WebDriverBy::cssSelector('#email'));
if (count($elements) > 0) {
// If not logged in fill in the email
$emailField = $elements[0];
$emailField->sendKeys($email);
$elements = $driver->findElements(WebDriverBy::cssSelector('#btnNext'));
if (count($elements) > 0) {
// Click the Next button if found
$elements[0]->click();
}
// Wait for the login button
$driver->wait(50)->until(
WebDriverExpectedCondition::visibilityOfElementLocated(
WebDriverBy::cssSelector('#btnLogin')
)
);
// Fill in password and login
$driver->findElement(WebDriverBy::cssSelector('#password'))->sendKeys($pass);
$driver->findElement(WebDriverBy::cssSelector('#btnLogin'))->click();
}
usleep(10 * 1000000);
$elements = $driver->findElements(WebDriverBy::cssSelector('#consentButton'));
if (count($elements) > 0) {
// Click the Consent button if found
$elements[0]->click();
} else {
// Go back to the previous page
$driver->navigate()->back();
// Wait for the consent button
$driver->wait(50)->until(
WebDriverExpectedCondition::visibilityOfElementLocated(
WebDriverBy::cssSelector('#consentButton')
)
);
// Click on consent button
$driver->findElement(WebDriverBy::cssSelector('#consentButton'))->click();
}
// Wait for the return URL
$driver->wait(50)->until(
WebDriverExpectedCondition::urlContains('https://example.com/returnUrl')
);
}
/**
* @throws Exception
*/
public static function completeHeliosVerification(string $checkoutUrl): void
{
$driver = self::getWebDriver();
$driver->get($checkoutUrl);
// Wait for the specific PayPal verification URL
$driver->wait(50)->until(
WebDriverExpectedCondition::urlContains(
'https://www.sandbox.paypal.com/webapps/helios?action=verify&flow=3ds'
)
);
// Wait until the outer iframe loads completely
usleep(10 * 1000000); // wait 10 secs
if (strpos($driver->getCurrentURL(), 'https://example.com/returnUrl') !== false) {
return;
}
// Switch to the appropriate iframe
$frame = $driver->switchTo()->frame(
$driver->findElement(WebDriverBy::cssSelector('iframe[name="threedsIframeV2"]'))
);
$frame = $frame->switchTo()->frame(
$driver->findElement(WebDriverBy::tagName('iframe'))
);
// Enter the verification code and submit
$frame->findElement(WebDriverBy::cssSelector('input[placeholder=" Enter Code Here"]'))->sendKeys('1234');
$submitButton = $frame->findElement(WebDriverBy::cssSelector('input[type="submit"][value="SUBMIT"]'));
$driver->executeScript('arguments[0].scrollIntoView(true);', [$submitButton]);
if ($submitButton->isDisplayed()) {
$submitButton->click();
}
// Check for the return URL
$driver->wait(50)->until(
WebDriverExpectedCondition::urlContains('https://example.com/returnUrl')
);
}
/**
* @var RemoteWebDriver
*/
private static $remoteWebDriver;
/**
* @throws Exception
*/
private static function getWebDriver(int $tryCount = 3): RemoteWebDriver
{
if (!isset(self::$remoteWebDriver)) {
$options = new FirefoxOptions();
$options->addArguments(['--headless']);
$capabilities = DesiredCapabilities::firefox();
$capabilities->setCapability(FirefoxOptions::CAPABILITY, $options);
try {
self::$remoteWebDriver = RemoteWebDriver::create(
'http://localhost:4444',
$capabilities,
500000,
500000
);
} catch (Exception $exp) {
if ($tryCount == 0) {
throw $exp;
}
return self::getWebDriver($tryCount - 1);
}
}
return self::$remoteWebDriver;
}
}

18
tests/bootstrap.php Normal file
View File

@@ -0,0 +1,18 @@
<?php
/*
* PayPalRESTAPIsLib
*
* This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
/**
* Load the composer's autoload file so that we don't have to require files
* manually in our code. Also load helper classes for tests.
*/
$vendor_dir = getenv('COMPOSER_VENDOR_DIR') ?: 'vendor';
require __DIR__ . '/../' . $vendor_dir . '/autoload.php';
require __DIR__ . '/ClientFactory.php';