monster_menus-9.0.x-dev/tests/src/Unit/Controller/DefaultControllerTest.php

tests/src/Unit/Controller/DefaultControllerTest.php
<?php

namespace Drupal\Tests\monster_menus\Unit\Controller;

use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Database\Connection;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Prophecy\PhpUnit\ProphecyTrait;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\Session\AccountInterface;
use Drupal\Tests\UnitTestCase;
use Drupal\monster_menus\Controller\DefaultController;
use Drupal\user\Entity\User;

/**
 * @coversDefaultClass \Drupal\monster_menus\Controller\DefaultController
 * @group monster_menus
 */
class DefaultControllerTest extends UnitTestCase {

  use ProphecyTrait;

  /**
   * The entity type manager.
   *
   * @var EntityTypeManagerInterface
   */
  protected $entityTypeManager;

  /**
   * The mocked database connection.
   *
   * @var \Drupal\Core\Database\Connection|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $database;

  /**
   * The dependency injection container.
   *
   * @var \Drupal\Component\DependencyInjection\ContainerInterface
   */
  protected $container;

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

    $this->database = $this->createMock(Connection::class);
    $this->entityTypeManager = $this->createMock(EntityTypeManagerInterface::class);

    $this->container = new \Symfony\Component\DependencyInjection\ContainerBuilder();
    $this->container->set('database', $this->database);
    $this->container->set('entity_type.manager', $this->entityTypeManager);
  }

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

  /**
   * Test the static create method.
   */
  public function testCreate() {
    $container = $this->createMock(ContainerInterface::class);
    $container->expects($this->any())
      ->method('get')
      ->will($this->onConsecutiveCalls($this->database));

    $this->assertInstanceOf(DefaultController::class, DefaultController::create($this->container));
  }

  /**
   * Test for 'menuAccessCreateHomepage'.
   *
   * @covers ::menuAccessCreateHomepage
   *
   * @dataProvider providerTestMenuAccessCreateHomepage
   */
  /*
   * @TODO: handle mm_get_setting() so this test doesn't fail to run.
  public function testMenuAccessCreateHomepage(AccountInterface $user, User $account, AccessResult $expected_result) {

    $container = new ContainerBuilder();
    $container->set('current_user', $user);
    \Drupal::setContainer($container);

    $this->assertEquals($expected_result, DefaultController::menuAccessCreateHomepage($account));
  }
  */

  /**
   * Data provider for ::testMenuAccessCreateHomepage.
   */
  public function providerTestMenuAccessCreateHomepage() {

    $cases = [];

    // Test if the account isn't active.
    $user = $this->prophesize(AccountInterface::class);
    $user->hasPermission('administer all users')->willReturn(TRUE);
    $account = $this->prophesize(User::class);
    $account->isActive()->willReturn(FALSE);
    $cases[] = [$user->reveal(), $account->reveal(), AccessResult::neutral()];

    // Test if the account is active and the current user has admin permissions.
    $user = $this->prophesize(AccountInterface::class);
    $user->hasPermission('administer all users')->willReturn(TRUE);
    $account = $this->prophesize(User::class);
    $account->isActive()->willReturn(TRUE);
    $cases[] = [$user->reveal(), $account->reveal(), AccessResult::allowed()];

    // Test if the account is active and doesn't have admin permissions, but the ids match.
    $user = $this->prophesize(AccountInterface::class);
    $user->hasPermission('administer all users')->willReturn(FALSE);
    $user->id()->willReturn(25);
    $account = $this->prophesize(User::class);
    $account->isActive()->willReturn(TRUE);
    $account->id()->willReturn(25);
    $cases[] = [$user->reveal(), $account->reveal(), AccessResult::allowed()];

    // Test if the account is active and doesn't have admin permissions, and the ids don't match.
    $user = $this->prophesize(AccountInterface::class);
    $user->hasPermission('administer all users')->willReturn(FALSE);
    $user->id()->willReturn(26);
    $account = $this->prophesize(User::class);
    $account->isActive()->willReturn(TRUE);
    $account->id()->willReturn(25);
    $cases[] = [$user->reveal(), $account->reveal(), AccessResult::neutral()];

    return $cases;
  }

  /**
   * Test for accessAnyAdmin.
   *
   * @covers ::accessAnyAdmin
   *
   * @dataProvider providerTestAccessAnyAdmin
   */
  public function testAccessAnyAdmin(AccountInterface $account, $expected_result) {
    $this->assertEquals($expected_result, DefaultController::accessAnyAdmin($account));
  }

  /**
   * Data provider for ::testAccessAnyAdmin.
   */
  public function providerTestAccessAnyAdmin() {

    $cases = [];

    $account = $this->prophesize(AccountInterface::class);
    $account->hasPermission('administer all groups')->willReturn(TRUE);
    $account->hasPermission('administer all users')->willReturn(FALSE);
    $account->hasPermission('administer all menus')->willReturn(FALSE);
    $cases[] = [$account->reveal(), AccessResult::allowed()];

    $account = $this->prophesize(AccountInterface::class);
    $account->hasPermission('administer all groups')->willReturn(FALSE);
    $account->hasPermission('administer all users')->willReturn(TRUE);
    $account->hasPermission('administer all menus')->willReturn(FALSE);
    $cases[] = [$account->reveal(), AccessResult::allowed()];

    $account = $this->prophesize(AccountInterface::class);
    $account->hasPermission('administer all groups')->willReturn(FALSE);
    $account->hasPermission('administer all users')->willReturn(FALSE);
    $account->hasPermission('administer all menus')->willReturn(TRUE);
    $cases[] = [$account->reveal(), AccessResult::allowed()];

    $account = $this->prophesize(AccountInterface::class);
    $account->hasPermission('administer all groups')->willReturn(FALSE);
    $account->hasPermission('administer all users')->willReturn(FALSE);
    $account->hasPermission('administer all menus')->willReturn(FALSE);
    $cases[] = [$account->reveal(), AccessResult::neutral()];

    return $cases;
  }

  /**
   * Test for accessAllAdmin.
   *
   * @covers ::accessAllAdmin
   *
   * @dataProvider providerTestAccessAllAdmin
   */
  public function testAccessAllAdmin(AccountInterface $account, $expected_result) {
    $this->assertEquals($expected_result, DefaultController::accessAllAdmin($account));
  }

  /**
   * Data provider for ::testAccessAllAdmin.
   */
  public function providerTestAccessAllAdmin() {

    $cases = [];

    $account = $this->prophesize(AccountInterface::class);
    $account->hasPermission('administer all groups')->willReturn(TRUE);
    $account->hasPermission('administer all users')->willReturn(TRUE);
    $account->hasPermission('administer all menus')->willReturn(TRUE);
    $cases[] = [$account->reveal(), AccessResult::allowed()];

    $account = $this->prophesize(AccountInterface::class);
    $account->hasPermission('administer all groups')->willReturn(TRUE);
    $account->hasPermission('administer all users')->willReturn(FALSE);
    $account->hasPermission('administer all menus')->willReturn(FALSE);
    $cases[] = [$account->reveal(), AccessResult::neutral()];

    $account = $this->prophesize(AccountInterface::class);
    $account->hasPermission('administer all groups')->willReturn(FALSE);
    $account->hasPermission('administer all users')->willReturn(TRUE);
    $account->hasPermission('administer all menus')->willReturn(FALSE);
    $cases[] = [$account->reveal(), AccessResult::neutral()];

    $account = $this->prophesize(AccountInterface::class);
    $account->hasPermission('administer all groups')->willReturn(FALSE);
    $account->hasPermission('administer all users')->willReturn(FALSE);
    $account->hasPermission('administer all menus')->willReturn(TRUE);
    $cases[] = [$account->reveal(), AccessResult::neutral()];

    $account = $this->prophesize(AccountInterface::class);
    $account->hasPermission('administer all groups')->willReturn(FALSE);
    $account->hasPermission('administer all users')->willReturn(FALSE);
    $account->hasPermission('administer all menus')->willReturn(FALSE);
    $cases[] = [$account->reveal(), AccessResult::neutral()];

    return $cases;
  }

}

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

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