monster_menus-9.0.x-dev/tests/src/Unit/MMTreeAccessControlHandlerTest.php

tests/src/Unit/MMTreeAccessControlHandlerTest.php
<?php

namespace Drupal\Tests\monster_menus\Unit;

use Prophecy\PhpUnit\ProphecyTrait;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Cache\Context\CacheContextsManager;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Tests\UnitTestCase;
use Drupal\monster_menus\MMTreeAccessControlHandler;

/**
 * @coversDefaultClass \Drupal\monster_menus\MMTreeAccessControlHandler
 * @group monster_menus
 */
class MMTreeAccessControlHandlerTest extends UnitTestCase {

  use ProphecyTrait;

  /**
   * The mocked class instance.
   *
   * @var \Drupal\monster_menus\MMTreeAccessControlHandler|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $MMTreeAccessControlHandler;

  /**
   * The mocked entity type.
   *
   * @var \Drupal\Core\Entity\EntityTypeInterface|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $entityType;

  /**
   * The dependency injection container.
   *
   * @var \Symfony\Component\DependencyInjection\ContainerBuilder
   */
  protected $container;

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

    $this->entityType = $this->createMock(EntityTypeInterface::class);

    $this->MMTreeAccessControlHandler = new TestMMTreeAccessControlHandler($this->entityType);

    $this->container = new ContainerBuilder();
    $cache_contexts_manager = $this->prophesize(CacheContextsManager::class);
    $cache_contexts_manager->assertValidTokens([])->willReturn(TRUE);
    $cache_contexts_manager->reveal();
    $this->container->set('cache_contexts_manager', $cache_contexts_manager);
    \Drupal::setContainer($this->container);
  }

  /**
   * {@inheritdoc}
   */
  protected function tearDown(): void {
    parent::tearDown();
    $container = new ContainerBuilder();
    \Drupal::setContainer($container);
  }

  /**
   * Test for 'checkCreateAccess'.
   *
   * @covers ::checkCreateAccess
   *
   * @dataProvider providerTestCheckCreateAccess
   */
  public function testCheckCreateAccess($entity, AccountInterface $account, $contexts, AccessResult $expected_result) {
    $class = new \ReflectionClass(MMTreeAccessControlHandler::class);
    $method = $class->getMethod('checkCreateAccess');
    $method->setAccessible(true);

    $this->assertEquals($expected_result->addCacheContexts($contexts), $method->invokeArgs($this->MMTreeAccessControlHandler, [$account, []]));
  }

  /**
   * Data provider for ::testCheckCreateAccess.
   */
  public function providerTestCheckCreateAccess() {
    $cases = [];

    $account = $this->prophesize(AccountInterface::class);
    $entity = $this->prophesize(EntityTypeInterface::class)->reveal();
    $account->hasPermission('add mm page entities')->willReturn(TRUE);
    $cases[] = [$entity, $account->reveal(), ['user.permissions'], AccessResult::allowed()];

    $account = $this->prophesize(AccountInterface::class);
    $account->hasPermission('add mm page entities')->willReturn(FALSE);
    $cases[] = [$entity, $account->reveal(), ['user.permissions'], AccessResult::neutral("The 'add mm page entities' permission is required.")];

    return $cases;
  }

}

/**
 * Tests MMTreeAccessControlHandler.
 */
class TestMMTreeAccessControlHandler extends MMTreeAccessControlHandler {

  /**
   * Allows access to the protected checkCreateAccess method.
   */
  public function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
    return parent::checkCreateAccess($account, $context, $entity_bundle);
  }

}

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

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