hook_event_dispatcher-8.x-2.04/modules/core_event_dispatcher/tests/src/Kernel/Entity/EntityViewEventTest.php

modules/core_event_dispatcher/tests/src/Kernel/Entity/EntityViewEventTest.php
<?php

namespace Drupal\Tests\core_event_dispatcher\Kernel\Entity;

use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Entity\EntityViewBuilder;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\hook_event_dispatcher\Kernel\ListenerTrait;
use Drupal\core_event_dispatcher\EntityHookEvents;
use Drupal\core_event_dispatcher\Event\Entity\EntityBuildDefaultsAlterEvent;
use Drupal\core_event_dispatcher\Event\Entity\EntityViewAlterEvent;
use Drupal\core_event_dispatcher\Event\Entity\EntityViewEvent;

/**
 * Class EntityViewEventTest.
 *
 * @group hook_event_dispatcher
 * @group core_event_dispatcher
 */
class EntityViewEventTest extends KernelTestBase {

  use ListenerTrait;

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'user',
    'entity_test',
    'hook_event_dispatcher',
    'core_event_dispatcher',
  ];

  /**
   * The entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected EntityTypeManagerInterface $entityTypeManager;

  /**
   * The entity view builder handler.
   *
   * @var \Drupal\Core\Entity\EntityViewBuilder
   */
  protected EntityViewBuilder $viewBuilder;

  /**
   * The entity test.
   *
   * @var \Drupal\Core\Entity\EntityInterface
   */
  protected EntityInterface $entity;

  /**
   * @var string|int
   */
  private string|int $viewMode;

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

    $this->entityTypeManager = $this->container->get('entity_type.manager');
    $this->entity = $this->entityTypeManager->getStorage('entity_test')
      ->create();

    $entityType = $this->entityTypeManager->getDefinition('entity_test');
    /** @var class-string<\Drupal\Core\Entity\EntityViewBuilder> $handlerClass */
    $handlerClass = $entityType->getHandlerClass('view_builder');
    $this->viewBuilder = $handlerClass::createInstance($this->container, $entityType);
  }

  /**
   * Test EntityViewEvent.
   *
   * @covers \Drupal\core_event_dispatcher\Event\Entity\EntityViewAlterEvent
   * @covers \Drupal\core_event_dispatcher\Event\Entity\EntityViewEvent
   *
   * @dataProvider viewModeProvider
   *
   * @throws \Exception
   */
  public function testEntityViewEventByReference(string|int $viewMode): void {
    $this->viewMode = $viewMode;
    $this->listen(EntityHookEvents::ENTITY_VIEW, 'onEntityViewEvent');
    $this->listen(EntityHookEvents::ENTITY_VIEW_ALTER, 'onEntityViewAlterEvent');

    $build = $this->viewBuilder->buildMultiple([
      [
        '#entity_test' => $this->entity,
        '#view_mode' => $viewMode,
      ],
    ]);

    $this->assertArrayHasKey(0, $build);
    $this->assertArrayHasKey('otherBuild', $build[0]);
    $this->assertCount(2, $build[0]['otherBuild']);
  }

  /**
   * Callback for EntityViewEvent.
   *
   * @param \Drupal\core_event_dispatcher\Event\Entity\EntityViewEvent $event
   *   The event.
   */
  public function onEntityViewEvent(EntityViewEvent $event): void {
    $this->assertEquals('entity_test.entity_test.' . $this->viewMode, $event->getDisplay()->id());
    $this->assertEquals($this->viewMode, $event->getViewMode());

    $build = &$event->getBuild();
    $build['otherBuild'] = [$this->randomMachineName()];
  }

  /**
   * Callback for EntityViewAlterEvent.
   *
   * @param \Drupal\core_event_dispatcher\Event\Entity\EntityViewAlterEvent $event
   *   The event.
   */
  public function onEntityViewAlterEvent(EntityViewAlterEvent $event): void {
    $this->assertEquals('entity_test.entity_test.' . $this->viewMode, $event->getDisplay()->id());

    $build = &$event->getBuild();
    $build['otherBuild'][] = $this->randomMachineName();
  }

  /**
   * Test EntityBuildDefaultsAlter.
   *
   * @covers \Drupal\core_event_dispatcher\Event\Entity\EntityBuildDefaultsAlterEvent
   *
   * @dataProvider viewModeProvider
   *
   * @throws \Exception
   */
  public function testEntityBuildDefaultsAlterEvent(string|int $viewMode): void {
    $this->viewMode = $viewMode;
    $this->listen(EntityHookEvents::ENTITY_BUILD_DEFAULTS_ALTER, 'onEntityBuildDefaultsAlter');

    $build = $this->viewBuilder->viewMultiple([$this->entity], $viewMode);
    $this->assertArrayHasKey(0, $build);
    $this->assertArrayHasKey('otherBuild', $build[0]);
    $this->assertCount(1, $build[0]['otherBuild']);
  }

  /**
   * Callback for EntityBuildDefaultAlterEvent.
   *
   * @param \Drupal\core_event_dispatcher\Event\Entity\EntityBuildDefaultsAlterEvent $event
   *   The event.
   */
  public function onEntityBuildDefaultsAlter(EntityBuildDefaultsAlterEvent $event): void {
    $this->assertEquals($this->viewMode, $event->getViewMode());

    $build = &$event->getBuild();
    $build['otherBuild'] = [$this->randomMachineName()];
  }

  /**
   * View mode provider.
   */
  public static function viewModeProvider(): \Generator {
    yield ['full'];
    yield ['entity_view_mode'];
    yield [mt_rand()];
  }

}

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

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