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()); } }