commerce_api-8.x-1.x-dev/tests/src/Functional/Cart/CartAccessApiResourceTest.php

tests/src/Functional/Cart/CartAccessApiResourceTest.php
<?php

namespace Drupal\Tests\commerce_api\Functional\Cart;

use Drupal\commerce_order\Entity\Order;
use Drupal\commerce_order\Entity\OrderInterface;
use Drupal\Component\Serialization\Json;
use Drupal\Core\Url;
use GuzzleHttp\RequestOptions;

/**
 * Tests cart api access check.
 *
 * @todo this tests with authenticated users not anonymous.
 * @group commerce_api
 */
class CartAccessApiResourceTest extends CartResourceTestBase {

  /**
   * Check access for route with no parameters (cart collection).
   */
  public function testNoParameters() {
    $request_options = $this->getAuthenticationRequestOptions();
    $url = Url::fromRoute('commerce_api.carts.collection');

    $cart = $this->cartProvider->createCart('default', $this->store, $this->account);
    $this->assertInstanceOf(OrderInterface::class, $cart);

    $response = $this->request('GET', $url, $request_options);
    $this->assertResponseCode(200, $response);
  }

  /**
   * Check no access for missing cart (cart canonical).
   */
  public function testNoCart() {
    $request_options = $this->getAuthenticationRequestOptions();

    // Request for cart that does not exist.
    $url = Url::fromRoute('commerce_api.carts.canonical', [
      'commerce_order' => 99,
    ]);

    $response = $this->request('GET', $url, $request_options);
    $this->assertResponseCode(404, $response);
  }

  /**
   * Check no access for non-draft/non-cart cart.
   */
  public function testInvalidCart() {
    $request_options = $this->getAuthenticationRequestOptions();

    // Create a placed cart, ensure it is accessible.
    $cart = $this->cartProvider->createCart('default', $this->store, $this->account);
    $this->assertInstanceOf(OrderInterface::class, $cart);
    $transition = $cart->getState()->getWorkflow()->getTransition('place');
    $cart->getState()->applyTransition($transition);
    $this->assertEquals($cart->getState()->getId(), 'completed');
    $cart->save();
    $cart = Order::load($cart->id());

    $url = Url::fromRoute('commerce_api.carts.canonical', [
      'commerce_order' => $cart->uuid(),
    ]);
    $response = $this->request('GET', $url, $request_options);
    $this->assertResponseCode(200, $response);

    // Create non-cart order. This should not be accessible.
    // Authenticated users have the `view own commerce_order` permission, so
    // it is.
    $order = $this->createEntity('commerce_order', [
      'type' => 'default',
      'mail' => $this->account->getEmail(),
      'uid' => $this->account->id(),
      'store_id' => $this->store->id(),
      'state' => 'draft',
    ]);
    $this->assertInstanceOf(OrderInterface::class, $order);

    $url = Url::fromRoute('commerce_api.carts.canonical', [
      'commerce_order' => $order->uuid(),
    ]);

    $response = $this->request('GET', $url, $request_options);
    $this->assertResponseCode(200, $response);
  }

  /**
   * Check no access for cart not belonging to user (cart canonical).
   */
  public function testNotUsersCart() {
    $request_options = $this->getAuthenticationRequestOptions();

    $cart = $this->cartProvider->createCart('default', $this->store, $this->createUser());
    $this->cartManager->addEntity($cart, $this->variation, 2);

    $url = Url::fromRoute('commerce_api.carts.canonical', [
      'commerce_order' => $cart->uuid(),
    ]);

    $response = $this->request('GET', $url, $request_options);
    $this->assertResponseCode(403, $response);
  }

  /**
   * Check no access for order item not in cart (cart update item).
   */
  public function testInvalidOrderItemCart() {
    $request_options = $this->getAuthenticationRequestOptions();

    // Create a cart with an order item.
    $cart = $this->cartProvider->createCart('default', $this->store, $this->account);
    $this->cartManager->addEntity($cart, $this->variation, 2);

    // Create order item in another cart.
    $another_cart = $this->cartProvider->createCart('default', $this->store, $this->createUser());
    $other_order_item = $this->cartManager->addEntity($another_cart, $this->variation, 2);

    $url = Url::fromRoute('commerce_api.carts.update_item', [
      'commerce_order' => $cart->uuid(),
      'commerce_order_item' => $other_order_item->uuid(),
    ]);
    $request_options[RequestOptions::HEADERS]['Accept'] = 'application/vnd.api+json';
    $request_options[RequestOptions::HEADERS]['Content-Type'] = 'application/vnd.api+json';
    $request_options[RequestOptions::BODY] = Json::encode([
      'data' => [
        'type' => 'order-item--default',
        'id' => $other_order_item->uuid(),
        'attributes' => [
          'quantity' => 10,
        ],
      ],
    ]);
    $response = $this->request('PATCH', $url, $request_options);
    $this->assertResponseCode(403, $response);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc