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

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

namespace Drupal\Tests\core_event_dispatcher\Kernel\Entity;

use Drupal\core_event_dispatcher\EntityHookEvents;
use Drupal\core_event_dispatcher\Event\Entity\EntityCreateEvent;
use Drupal\core_event_dispatcher\Event\Entity\EntityDeleteEvent;
use Drupal\core_event_dispatcher\Event\Entity\EntityInsertEvent;
use Drupal\core_event_dispatcher\Event\Entity\EntityLoadEvent;
use Drupal\core_event_dispatcher\Event\Entity\EntityPredeleteEvent;
use Drupal\core_event_dispatcher\Event\Entity\EntityPresaveEvent;
use Drupal\core_event_dispatcher\Event\Entity\EntityUpdateEvent;
use Drupal\entity_test\Entity\EntityTest;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\hook_event_dispatcher\Kernel\ListenerTrait;

/**
 * Class EntityCrudEventTest.
 *
 * @covers \Drupal\core_event_dispatcher\Event\Entity\AbstractEntityEvent
 * @covers \Drupal\core_event_dispatcher\Event\Entity\EntityCreateEvent
 * @covers \Drupal\core_event_dispatcher\Event\Entity\EntityDeleteEvent
 * @covers \Drupal\core_event_dispatcher\Event\Entity\EntityInsertEvent
 * @covers \Drupal\core_event_dispatcher\Event\Entity\EntityLoadEvent
 * @covers \Drupal\core_event_dispatcher\Event\Entity\EntityPredeleteEvent
 * @covers \Drupal\core_event_dispatcher\Event\Entity\EntityPresaveEvent
 * @covers \Drupal\core_event_dispatcher\Event\Entity\EntityUpdateEvent
 *
 * @group hook_event_dispatcher
 * @group core_event_dispatcher
 */
class EntityCrudEventTest extends KernelTestBase {

  use ListenerTrait;

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

  /**
   * Test entity CRUD event.
   *
   * @throws \Exception
   */
  public function testEntityEvent(): void {
    $storage = $this->container->get('entity_type.manager')->getStorage('entity_test');

    // Test EntityCreateEvent.
    $this->listen(EntityHookEvents::ENTITY_CREATE, 'onEntityCreate');
    $entity = $storage->create();
    $this->assertInstanceOf(EntityTest::class, $entity);
    $this->assertEquals('Created', $entity->label());

    $this->installEntitySchema('entity_test');

    // Test EntityPresaveEvent.
    $this->listen(EntityHookEvents::ENTITY_PRE_SAVE, 'onEntityPresave', $this->atLeastOnce());

    // Test EntityInsertEvent.
    $this->listen(EntityHookEvents::ENTITY_INSERT, 'onEntityInsert');
    $entity->save();

    // Test EntityLoadEvent.
    $this->listen(EntityHookEvents::ENTITY_LOAD, 'onEntityLoad', $this->atLeastOnce());
    $entity = $storage->load($entity->id());
    $this->assertInstanceOf(EntityTest::class, $entity);

    // Test EntityUpdateEvent.
    $this->listen(EntityHookEvents::ENTITY_UPDATE, 'onEntityUpdate');
    $entity->setName('Updated');
    $entity->save();

    // Test EntityPredeleteEvent and EntityDeleteEvent.
    $this->listen([
      EntityHookEvents::ENTITY_PRE_DELETE,
      EntityHookEvents::ENTITY_DELETE,
    ], 'onEntityDelete', $this->exactly(2));

    $entity->delete();
  }

  /**
   * Test EntityCreateEvent.
   *
   * @param \Drupal\core_event_dispatcher\Event\Entity\EntityCreateEvent $event
   *   The event.
   */
  public function onEntityCreate(EntityCreateEvent $event): void {
    $entity = $event->getEntity();
    $this->assertInstanceOf(EntityTest::class, $entity);
    $entity->setName('Created');
  }

  /**
   * Test EntityInsertEvent & EntityTranslationInsertEvent.
   *
   * @param \Drupal\core_event_dispatcher\Event\Entity\EntityInsertEvent $event
   *   The event.
   */
  public function onEntityInsert(EntityInsertEvent $event): void {
    $entity = $event->getEntity();
    $this->assertEquals('Created', $entity->label());
  }

  /**
   * Test EntityLoadEvent.
   *
   * @param \Drupal\core_event_dispatcher\Event\Entity\EntityLoadEvent $event
   *   The event.
   */
  public function onEntityLoad(EntityLoadEvent $event): void {
    foreach ($event->getEntities() as $entity) {
      $this->assertInstanceOf(EntityTest::class, $entity);
      $this->assertEquals('Created', $entity->label());
    }

    $this->assertEquals('entity_test', $event->getEntityTypeId());
  }

  /**
   * Test EntityPresaveEvent.
   *
   * @param \Drupal\core_event_dispatcher\Event\Entity\EntityPresaveEvent $event
   *   The event.
   */
  public function onEntityPresave(EntityPresaveEvent $event): void {
    $entity = $event->getEntity();
    if ($entity->isNew()) {
      $this->assertNull($event->getOriginalEntity());
      $this->assertEquals('Created', $event->getEntity()->label());
      return;
    }

    $this->assertNotNull($event->getOriginalEntity());
    $this->assertEquals('Created', $event->getOriginalEntity()->label());
    $this->assertEquals('Updated', $event->getEntity()->label());
  }

  /**
   * Test EntityUpdateEvent.
   *
   * @param \Drupal\core_event_dispatcher\Event\Entity\EntityUpdateEvent $event
   *   The event.
   */
  public function onEntityUpdate(EntityUpdateEvent $event): void {
    $this->assertEquals('Created', $event->getOriginalEntity()->label());
    $this->assertEquals('Updated', $event->getEntity()->label());
  }

  /**
   * Test EntityDeleteEvent.
   *
   * @param \Drupal\core_event_dispatcher\Event\Entity\EntityDeleteEvent|\Drupal\core_event_dispatcher\Event\Entity\EntityPredeleteEvent $event
   *   The event.
   */
  public function onEntityDelete(EntityDeleteEvent|EntityPredeleteEvent $event): void {
    $this->assertEquals('Updated', $event->getEntity()->label());
  }

}

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

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