mirror of
https://gh.wpcy.net/https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2026-04-26 01:14:19 +08:00
102 lines
2.9 KiB
PHP
102 lines
2.9 KiB
PHP
<?php
|
|
declare( strict_types = 1 );
|
|
|
|
namespace WooCommerce\PayPalCommerce\StoreSync\Endpoint;
|
|
|
|
use WP_REST_Request;
|
|
|
|
use WooCommerce\PayPalCommerce\StoreSync\Response\CartResponse;
|
|
use WooCommerce\PayPalCommerce\StoreSync\Schema\PayPalCart;
|
|
|
|
/**
|
|
* @covers \WooCommerce\PayPalCommerce\StoreSync\Endpoint\GetCartEndpoint
|
|
*/
|
|
class GetCartEndpointTest extends AgenticEndpointTestCase {
|
|
|
|
public function test_get_cart_returns_200_ok_when_cart_exists(): void {
|
|
$cart_id = 't_mock_cart_id_12345';
|
|
$ec_token = 'EC-12345TOKEN';
|
|
$created_time = time();
|
|
|
|
$mock_cart_data = $this->cart()->with_item( 'TEST-001', 2, '50.00' )->to_array();
|
|
|
|
$mocks = $this->create_mocks();
|
|
$session_handler = $mocks['session_handler'];
|
|
$response_factory = $mocks['response_factory'];
|
|
|
|
$mock_cart = PayPalCart::from_array( $mock_cart_data );
|
|
|
|
// Mock session handler.
|
|
$session_handler->allows( 'load_cart_session' )
|
|
->with( $cart_id )
|
|
->andReturn(
|
|
array(
|
|
'cart' => $mock_cart,
|
|
'ec_token' => $ec_token,
|
|
'created' => $created_time,
|
|
)
|
|
);
|
|
|
|
// Mock response factory.
|
|
$response_factory->allows( 'from_cart' )
|
|
->andReturnUsing( fn( $cart, $cart_id ) => new CartResponse(
|
|
$cart,
|
|
array(),
|
|
$cart_id
|
|
) );
|
|
|
|
$endpoint = new GetCartEndpoint(
|
|
$mocks['auth_provider'],
|
|
$session_handler,
|
|
$mocks['session_manager'],
|
|
$response_factory,
|
|
$mocks['validation_processor'],
|
|
$mocks['logger'],
|
|
$mocks['order_manager']
|
|
);
|
|
|
|
$request = new WP_REST_Request( 'GET', "/wp-json/paypal/v1/merchant-cart/{$cart_id}" );
|
|
$request->set_param( 'cart_id', $cart_id );
|
|
|
|
$response = $endpoint->get_cart( $request );
|
|
$data = $response->get_data();
|
|
|
|
$this->assertIsArray( $data );
|
|
$this->assertArrayHasKey( 'status', $data );
|
|
$this->assertArrayHasKey( 'payment_method', $data );
|
|
$this->assertArrayNotHasKey( 'token', $data['payment_method'], 'Token is only expected when creating a new cart.' );
|
|
$this->assertSame( 200, $response->get_status() );
|
|
}
|
|
|
|
public function test_get_cart_returns_error_when_cart_unavailable(): void {
|
|
$cart_id = 't_unavailable_cart_id';
|
|
|
|
$mocks = $this->create_mocks();
|
|
$session_handler = $mocks['session_handler'];
|
|
|
|
// Mock session handler - return null for unavailable cart (not found or expired).
|
|
$session_handler->allows( 'load_cart_session' )
|
|
->with( $cart_id )
|
|
->andReturn( null );
|
|
|
|
$endpoint = new GetCartEndpoint(
|
|
$mocks['auth_provider'],
|
|
$session_handler,
|
|
$mocks['session_manager'],
|
|
$mocks['response_factory'],
|
|
$mocks['validation_processor'],
|
|
$mocks['logger'],
|
|
$mocks['order_manager']
|
|
);
|
|
|
|
$request = new WP_REST_Request( 'GET', "/wp-json/paypal/v1/merchant-cart/{$cart_id}" );
|
|
$request->set_param( 'cart_id', $cart_id );
|
|
|
|
$response = $endpoint->get_cart( $request );
|
|
$data = $response->get_data();
|
|
|
|
$this->assertIsArray( $data );
|
|
$this->assertNotSame( 200, $response->get_status() );
|
|
$this->assert_error_response( $data );
|
|
}
|
|
}
|