AdminAccountSwitcherTest.php

Same filename and directory in other branches
  1. 10 core/tests/Drupal/KernelTests/Core/DefaultContent/AdminAccountSwitcherTest.php

Namespace

Drupal\KernelTests\Core\DefaultContent

File

core/tests/Drupal/KernelTests/Core/DefaultContent/AdminAccountSwitcherTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\KernelTests\Core\DefaultContent;

use Drupal\Core\Access\AccessException;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\DefaultContent\AdminAccountSwitcher;
use Drupal\Core\Session\AccountSwitcherInterface;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\user\Traits\UserCreationTrait;

/**
 * @covers \Drupal\Core\DefaultContent\AdminAccountSwitcher
 * @group DefaultContent
 */
class AdminAccountSwitcherTest extends KernelTestBase {
  use UserCreationTrait;
  
  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'system',
    'user',
  ];
  
  /**
   * {@inheritdoc}
   */
  protected function setUp() : void {
    parent::setUp();
    $this->installEntitySchema('user');
  }
  
  /**
   * {@inheritdoc}
   */
  public function register(ContainerBuilder $container) : void {
    parent::register($container);
    $container->getDefinition(AdminAccountSwitcher::class)
      ->setPublic(TRUE);
  }
  
  /**
   * Tests switching to a user with an administrative role.
   */
  public function testSwitchToAdministrator() : void {
    /** @var \Drupal\Core\Session\AccountInterface $account */
    $account = $this->createUser(admin: TRUE);
    $this->assertSame($account->id(), $this->container
      ->get(AdminAccountSwitcher::class)
      ->switchToAdministrator()
      ->id());
    $this->assertSame($account->id(), $this->container
      ->get('current_user')
      ->id());
  }
  
  /**
   * Tests that there is an error if there are no administrative users.
   */
  public function testNoAdministratorsExist() : void {
    /** @var \Drupal\Core\Session\AccountInterface $account */
    $account = $this->createUser();
    $this->assertSame(1, (int) $account->id());
    $this->expectException(AccessException::class);
    $this->expectExceptionMessage("There are no user accounts with administrative roles.");
    $this->container
      ->get(AdminAccountSwitcher::class)
      ->switchToAdministrator();
  }
  
  /**
   * Tests switching to user 1 when the superuser access policy is enabled.
   */
  public function testSuperUser() : void {
    /** @var \Drupal\Core\Session\AccountInterface $account */
    $account = $this->createUser();
    $this->assertSame(1, (int) $account->id());
    $switcher = new AdminAccountSwitcher($this->container
      ->get(AccountSwitcherInterface::class), $this->container
      ->get(EntityTypeManagerInterface::class), TRUE);
    $this->assertSame(1, (int) $switcher->switchToAdministrator()
      ->id());
  }
  
  /**
   * Tests switching and switching back.
   */
  public function testSwitchToAndSwitchBack() : void {
    $this->assertTrue($this->container
      ->get('current_user')
      ->isAnonymous());
    /** @var \Drupal\Core\Session\AccountInterface $account */
    $account = $this->createUser();
    $switcher = $this->container
      ->get(AdminAccountSwitcher::class);
    $this->assertSame($switcher, $switcher->switchTo($account));
    $this->assertSame($account->id(), $this->container
      ->get('current_user')
      ->id());
    $this->assertSame($switcher, $switcher->switchBack());
    $this->assertTrue($this->container
      ->get('current_user')
      ->isAnonymous());
  }

}

Classes

Title Deprecated Summary
AdminAccountSwitcherTest @covers \Drupal\Core\DefaultContent\AdminAccountSwitcher[[api-linebreak]] @group DefaultContent

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.