commerce_google_tag_manager-8.x-2.0-beta1/tests/src/Kernel/EventSubscriber/CartEventTest.php

tests/src/Kernel/EventSubscriber/CartEventTest.php
<?php

namespace Drupal\Tests\commerce_google_tag_manager\Kernel\EventSubscriber;

use Drupal\Tests\commerce_google_tag_manager\Kernel\CommerceKernelTestBase;
use Drupal\commerce_google_tag_manager\EventSubscriber\CommerceEventsSubscriber;
use Drupal\commerce_price\Price;
use Drupal\commerce_product\Entity\ProductVariation;
use Drupal\commerce_cart\Event\CartEntityAddEvent;
use Drupal\commerce_cart\Event\CartOrderItemRemoveEvent;
use Drupal\Tests\commerce_cart\Traits\CartManagerTestTrait;
use Drupal\Tests\commerce_google_tag_manager\Traits\DeprecationSuppressionTrait;

/**
 * @coversDefaultClass \Drupal\commerce_google_tag_manager\EventSubscriber\CommerceEventsSubscriber
 *
 * @group commerce
 * @group commerce_google_tag_manager
 * @group commerce_google_tag_manager_kernel
 */
class CartEventTest extends CommerceKernelTestBase {
  use CartManagerTestTrait;
  use DeprecationSuppressionTrait;

  /**
   * Modules to enable.
   *
   * @var array
   */
  public static $modules = [
    'entity_reference_revisions',
    'profile',
  ];

  /**
   * The cart manager.
   *
   * @var \Drupal\commerce_cart\CartManager
   */
  protected $cartManager;

  /**
   * The cart provider.
   *
   * @var \Drupal\commerce_cart\CartProvider
   */
  protected $cartProvider;

  /**
   * A product variation to test with.
   *
   * @var \Drupal\commerce_product\Entity\ProductVariation
   */
  protected $variation;

  /**
   * A sample user.
   *
   * @var \Drupal\user\UserInterface
   */
  protected $user;

  /**
   * The event dispatcher.
   *
   * @var \Symfony\Component\EventDispatcher\EventDispatcherInterface
   */
  private $eventDispatcher;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $this->variation = ProductVariation::create([
      'type'   => 'default',
      'sku'    => strtolower($this->randomMachineName()),
      'title'  => $this->randomString(),
      'price'  => new Price('1.00', 'USD'),
      'status' => TRUE,
    ]);

    $user = $this->createUser();
    $this->user = $this->reloadEntity($user);

    $this->installCommerceCart();

    // Remove original CommerceEventsSubscriber which should be Mocked later.
    $this->eventDispatcher = $this->container->get('event_dispatcher');
    $this->eventDispatcher->removeSubscriber($this->container->get('commerce_google_tag_manager.commerce_events_subscriber'));
  }

  /**
   * @covers ::trackCartAdd
   */
  public function testTrackCartAdd() {
    // Create a partial-mocked version of CommerceEventsSubscriber.
    $subscriber = $this->getMockBuilder(CommerceEventsSubscriber::class)
      ->disableOriginalConstructor()
      ->setMethods(['trackCartAdd'])
      ->getMock();

    // Assert the trackCartAdd will be called only once.
    $subscriber->expects($this->once())
      ->method('trackCartAdd')
      ->with($this->isInstanceOf(CartEntityAddEvent::class));

    // Add the new mocked CommerceEventsSubscriber.
    $this->eventDispatcher->addSubscriber($subscriber);

    // Add to cart, which should fire a CartEvents::CART_ENTITY_ADD.
    $cart = $this->cartProvider->createCart('default', $this->store, $this->user);
    $this->cartManager->addEntity($cart, $this->variation);
  }

  /**
   * @covers ::trackCartRemove
   */
  public function testTrackCartRemove() {
    // Create a partial-mocked version of CommerceEventsSubscriber.
    $subscriber = $this->getMockBuilder(CommerceEventsSubscriber::class)
      ->disableOriginalConstructor()
      ->setMethods(['trackCartAdd', 'trackCartRemove'])
      ->getMock();

    // Assert the trackCartRemove will be called only once.
    $subscriber->expects($this->once())
      ->method('trackCartRemove')
      ->with($this->isInstanceOf(CartOrderItemRemoveEvent::class));

    // Add the new mocked CommerceEventsSubscriber.
    $this->eventDispatcher->addSubscriber($subscriber);

    // Remove to cart, which should fire a CartEvents::CART_ORDER_ITEM_REMOVE.
    $cart = $this->cartProvider->createCart('default', $this->store, $this->user);
    $order_item = $this->cartManager->addEntity($cart, $this->variation);
    $this->cartManager->removeOrderItem($cart, $order_item);
  }

}

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

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