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

tests/src/Kernel/EventStorageServiceTest.php
<?php

namespace Drupal\Tests\commerce_google_tag_manager\Kernel;

use Drupal\commerce_google_tag_manager\EventTrackerService;
use Drupal\Tests\commerce_google_tag_manager\Traits\DeprecationSuppressionTrait;

/**
 * @coversDefaultClass \Drupal\commerce_google_tag_manager\EventStorageService
 *
 * @group commerce
 * @group commerce_google_tag_manager
 * @group commerce_google_tag_manager_kernel
 */
class EventStorageServiceTest extends CommerceKernelTestBase {
  use DeprecationSuppressionTrait;

  /**
   * {@inheritdoc}
   */
  public static $modules = [
    'state_machine',
    'entity_reference_revisions',
    'profile',
  ];

  /**
   * The tempstore object.
   *
   * @var \Drupal\Core\TempStore\PrivateTempStore
   */
  private $tempStore;

  /**
   * The Commerce GTM event storage.
   *
   * @var \Drupal\commerce_google_tag_manager\EventStorageService
   */
  private $eventStorage;

  /**
   * The Google Tag Manager Product Detail view event structure to test with.
   *
   * @var array
   */
  protected $detailEvent;

  /**
   * The Google Tag Manager Checkout event structure to test with.
   *
   * @var array
   */
  protected $checkoutEvent;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    $this->installEntitySchema('profile');

    $this->installSchema('system', ['key_value_expire']);

    $this->tempStore = $this->container->get('tempstore.private')->get('commerce_google_tag_manager');
    $this->eventStorage = $this->container->get('commerce_google_tag_manager.event_storage');

    $this->detailEvent = [
      'event' => EventTrackerService::EVENT_PRODUCT_DETAIL_VIEWS,
      'ecommerce' => [
        'detail' => [
          'actionField' => [
            'list' => '',
          ],
          'products' => [
            0 => [
              'name'    => 'Lorem Ipsum',
              'id'      => '1',
              'price'   => '11.99',
              'variant' => 'Lorem Ipsum',
            ],
          ],
        ],
      ],
    ];

    $this->checkoutEvent = [
      'event' => EventTrackerService::EVENT_CHECKOUT,
      'ecommerce' => [
        'checkout' => [
          'actionField' => [
            'step' => 1,
          ],
          'products' => [
            0 => [
              'name'    => 'Lorem Ipsum',
              'id'      => '1',
              'price'   => '11.99',
              'variant' => 'Lorem Ipsum',
              'quantity' => 1,
            ],
          ],
        ],
      ],
    ];
  }

  /**
   * @covers ::getEvents
   */
  public function testGetEvents() {
    $this->tempStore->set('events', [
      '0e05cdf318b5832a7caf62ad11d386f4' => $this->detailEvent,
    ]);
    $result = $this->eventStorage->getEvents();
    $this->assertSame([0 => $this->detailEvent], $result);
  }

  /**
   * @covers ::getEvents
   */
  public function testGetEventsEmpty() {
    $this->tempStore->set('events', NULL);
    $result = $this->eventStorage->getEvents();
    $this->assertIsArray($result);
    $this->assertEmpty($result);
  }

  /**
   * @covers ::flush
   */
  public function testFlush() {
    $this->tempStore->set('events', [
      '0e05cdf318b5832a7caf62ad11d386f4' => $this->detailEvent,
    ]);
    $this->eventStorage->flush();
    $result = $this->tempStore->get('events');
    $this->assertNull($result);
  }

  /**
   * @covers ::addEvent
   *
   * Asserts usage of Private Temp Store for events queue.
   */
  public function testAddEvent() {
    $this->eventStorage->addEvent($this->detailEvent);

    $result = $this->tempStore->get('events');
    $this->assertIsArray($result);
    $this->assertSame([
      '0e05cdf318b5832a7caf62ad11d386f4' => $this->detailEvent,
    ], $result);
  }

  /**
   * @covers ::addEvent
   *
   * Asserts the events queue follows the FIFO (First in First out) pattern.
   */
  public function testAddEventFifoQueue() {
    $this->eventStorage->addEvent($this->detailEvent);
    $this->eventStorage->addEvent($this->checkoutEvent);
    $events = $this->tempStore->get('events');

    $this->assertSame([
      '0e05cdf318b5832a7caf62ad11d386f4' => $this->detailEvent,
      '5d92a6ab1f5bd49c7ac5a065302dcb16' => $this->checkoutEvent,
    ], $events);
  }

  /**
   * @covers ::addEvent
   *
   * Asserts strictly same event aren't added twice in the events queue.
   */
  public function testAddEventSameSkipped() {
    $this->eventStorage->addEvent($this->detailEvent);
    $this->eventStorage->addEvent($this->detailEvent);
    $events = $this->tempStore->get('events');
    $this->assertSame([
      '0e05cdf318b5832a7caf62ad11d386f4' => $this->detailEvent,
    ], $events);
  }

}

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

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