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

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

namespace Drupal\Tests\core_event_dispatcher\Kernel\Entity;

use Drupal\Core\Access\AccessResultAllowed;
use Drupal\Core\Access\AccessResultForbidden;
use Drupal\Core\Access\AccessResultInterface;
use Drupal\Core\Access\AccessResultNeutral;
use Drupal\core_event_dispatcher\EntityHookEvents;
use Drupal\core_event_dispatcher\Event\Entity\EntityAccessEvent;
use Drupal\KernelTests\KernelTestBase;

/**
 * Class EntityAccessEventTest.
 *
 * @covers \Drupal\core_event_dispatcher\Event\Entity\EntityAccessEvent
 *
 * @group hook_event_dispatcher
 * @group core_event_dispatcher
 */
class EntityAccessEventTest extends KernelTestBase {

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

  /**
   * Data provider for testEntityAccessEvent.
   *
   * @return array[]
   *   The provided data.
   *
   * @see \Drupal\Tests\core_event_dispatcher\Kernel\Entity\EntityAccessEventTest::testEntityAccessEvent()
   */
  public static function entityAccessEventDataProvider(): array {
    return [
      'neutral access result' => [
        new AccessResultNeutral(),
        TRUE,
        FALSE,
        FALSE,
      ],
      'allowed access result' => [
        new AccessResultAllowed(),
        FALSE,
        TRUE,
        FALSE,
      ],
      'forbidden access result' => [
        new AccessResultForbidden(),
        FALSE,
        FALSE,
        TRUE,
      ],
    ];
  }

  /**
   * EntityAccessEvent with no changes test.
   *
   * @throws \Exception
   */
  public function testEntityAccessEventWithNoChanges(): void {
    $entityTypeManager = $this->container->get('entity_type.manager');

    $entity = $entityTypeManager->getStorage('entity_test')->create(['name' => $this->randomMachineName()]);
    $user = $entityTypeManager->getStorage('user')->create();
    $operation = $this->randomString();

    $this->container->get('event_dispatcher')
      ->addListener(EntityHookEvents::ENTITY_ACCESS, function (EntityAccessEvent $event) use ($entity, $operation, $user) {
        $this->assertSame($entity, $event->getEntity());
        $this->assertSame($operation, $event->getOperation());
        $this->assertSame($user, $event->getAccount());
      });

    $this->assertFalse($entity->access($operation, $user));
  }

  /**
   * Test EntityAccessEvent.
   *
   * @dataProvider entityAccessEventDataProvider
   *
   * @throws \Exception
   */
  public function testEntityAccessEvent(AccessResultInterface $accessResult, bool $isNeutral, bool $isAllowed, bool $isForbidden): void {
    $this->container->get('event_dispatcher')
      ->addListener(EntityHookEvents::ENTITY_ACCESS, static function (EntityAccessEvent $event) use ($accessResult) {
        $event->addAccessResult($accessResult);
      });

    $entity = $this->container->get('entity_type.manager')
      ->getStorage('entity_test')
      ->create(['name' => $this->randomMachineName()]);

    $access = $entity->access($this->randomString(), NULL, TRUE);

    $this->assertEquals($isNeutral, $access->isNeutral());
    $this->assertEquals($isAllowed, $access->isAllowed());
    $this->assertEquals($isForbidden, $access->isForbidden());
  }

  /**
   * EntityAccessEvent with combined results test.
   *
   * This simulates multiple event listeners adding their own access results to
   * this event.
   *
   * @throws \Exception
   */
  public function testEntityAccessEventCombinedResults(): void {
    $this->container->get('event_dispatcher')
      ->addListener(EntityHookEvents::ENTITY_ACCESS, static function (EntityAccessEvent $event) {
        $event->addAccessResult(new AccessResultNeutral());
        $event->addAccessResult(new AccessResultAllowed());
        $event->addAccessResult(new AccessResultForbidden());
      });

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

    $access = $entity->access($this->randomString(), NULL, TRUE);

    $this->assertFalse($access->isNeutral());
    $this->assertFalse($access->isAllowed());
    $this->assertTrue($access->isForbidden());
  }

}

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

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