You are here

class UserSessionTest in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/tests/Drupal/Tests/Core/Session/UserSessionTest.php \Drupal\Tests\Core\Session\UserSessionTest

@coversDefaultClass \Drupal\Core\Session\UserSession @group Session

Hierarchy

Expanded class hierarchy of UserSessionTest

1 file declares its use of UserSessionTest
UserTest.php in core/modules/user/tests/src/Unit/Plugin/Core/Entity/UserTest.php
Contains \Drupal\Tests\user\Unit\Plugin\Core\Entity\UserTest.

File

core/tests/Drupal/Tests/Core/Session/UserSessionTest.php, line 19
Contains \Drupal\Tests\Core\Session\UserSessionTest.

Namespace

Drupal\Tests\Core\Session
View source
class UserSessionTest extends UnitTestCase {

  /**
   * The user sessions used in the test
   *
   * @var \Drupal\Core\Session\AccountInterface[]
   */
  protected $users = array();

  /**
   * Provides test data for getHasPermission().
   *
   * @return array
   */
  public function providerTestHasPermission() {
    $data = array();
    $data[] = array(
      'example permission',
      array(
        'user_one',
        'user_two',
      ),
      array(
        'user_last',
      ),
    );
    $data[] = array(
      'another example permission',
      array(
        'user_two',
      ),
      array(
        'user_one',
        'user_last',
      ),
    );
    $data[] = array(
      'final example permission',
      array(),
      array(
        'user_one',
        'user_two',
        'user_last',
      ),
    );
    return $data;
  }

  /**
   * Setups a user session for the test.
   *
   * @param array $rids
   *   The rids of the user.
   * @param bool $authenticated
   *   TRUE if it is an authenticated user.
   *
   * @return \Drupal\Core\Session\AccountInterface
   *   The created user session.
   */
  protected function createUserSession(array $rids = array(), $authenticated = FALSE) {
    array_unshift($rids, $authenticated ? RoleInterface::AUTHENTICATED_ID : RoleInterface::ANONYMOUS_ID);
    return new UserSession(array(
      'roles' => $rids,
    ));
  }

  /**
   * {@inheritdoc}
   */
  protected function setUp() {
    parent::setUp();
    $roles = array();
    $roles['role_one'] = $this
      ->getMockBuilder('Drupal\\user\\Entity\\Role')
      ->disableOriginalConstructor()
      ->setMethods(array(
      'hasPermission',
    ))
      ->getMock();
    $roles['role_one']
      ->expects($this
      ->any())
      ->method('hasPermission')
      ->will($this
      ->returnValueMap(array(
      array(
        'example permission',
        TRUE,
      ),
      array(
        'another example permission',
        FALSE,
      ),
      array(
        'last example permission',
        FALSE,
      ),
    )));
    $roles['role_two'] = $this
      ->getMockBuilder('Drupal\\user\\Entity\\Role')
      ->disableOriginalConstructor()
      ->setMethods(array(
      'hasPermission',
    ))
      ->getMock();
    $roles['role_two']
      ->expects($this
      ->any())
      ->method('hasPermission')
      ->will($this
      ->returnValueMap(array(
      array(
        'example permission',
        TRUE,
      ),
      array(
        'another example permission',
        TRUE,
      ),
      array(
        'last example permission',
        FALSE,
      ),
    )));
    $roles['anonymous'] = $this
      ->getMockBuilder('Drupal\\user\\Entity\\Role')
      ->disableOriginalConstructor()
      ->setMethods(array(
      'hasPermission',
    ))
      ->getMock();
    $roles['anonymous']
      ->expects($this
      ->any())
      ->method('hasPermission')
      ->will($this
      ->returnValueMap(array(
      array(
        'example permission',
        FALSE,
      ),
      array(
        'another example permission',
        FALSE,
      ),
      array(
        'last example permission',
        FALSE,
      ),
    )));
    $role_storage = $this
      ->getMockBuilder('Drupal\\user\\RoleStorage')
      ->disableOriginalConstructor()
      ->setMethods(array(
      'loadMultiple',
    ))
      ->getMock();
    $role_storage
      ->expects($this
      ->any())
      ->method('loadMultiple')
      ->will($this
      ->returnValueMap(array(
      array(
        array(),
        array(),
      ),
      array(
        NULL,
        $roles,
      ),
      array(
        array(
          'anonymous',
        ),
        array(
          $roles['anonymous'],
        ),
      ),
      array(
        array(
          'anonymous',
          'role_one',
        ),
        array(
          $roles['role_one'],
        ),
      ),
      array(
        array(
          'anonymous',
          'role_two',
        ),
        array(
          $roles['role_two'],
        ),
      ),
      array(
        array(
          'anonymous',
          'role_one',
          'role_two',
        ),
        array(
          $roles['role_one'],
          $roles['role_two'],
        ),
      ),
    )));
    $entity_manager = $this
      ->getMock('Drupal\\Core\\Entity\\EntityManagerInterface');
    $entity_manager
      ->expects($this
      ->any())
      ->method('getStorage')
      ->with($this
      ->equalTo('user_role'))
      ->will($this
      ->returnValue($role_storage));
    $container = new ContainerBuilder();
    $container
      ->set('entity.manager', $entity_manager);
    \Drupal::setContainer($container);
    $this->users['user_one'] = $this
      ->createUserSession(array(
      'role_one',
    ));
    $this->users['user_two'] = $this
      ->createUserSession(array(
      'role_one',
      'role_two',
    ));
    $this->users['user_three'] = $this
      ->createUserSession(array(
      'role_two',
    ), TRUE);
    $this->users['user_last'] = $this
      ->createUserSession();
  }

  /**
   * Tests the has permission method.
   *
   * @param string $permission
   *   The permission to check.
   * @param \Drupal\Core\Session\AccountInterface[] $sessions_with_access
   *   The users with access.
   * @param \Drupal\Core\Session\AccountInterface[] $sessions_without_access
   *   The users without access.
   *
   * @dataProvider providerTestHasPermission
   *
   * @see \Drupal\Core\Session\UserSession::hasPermission().
   */
  public function testHasPermission($permission, array $sessions_with_access, array $sessions_without_access) {
    foreach ($sessions_with_access as $name) {
      $this
        ->assertTrue($this->users[$name]
        ->hasPermission($permission));
    }
    foreach ($sessions_without_access as $name) {
      $this
        ->assertFalse($this->users[$name]
        ->hasPermission($permission));
    }
  }

  /**
   * Tests the method getRoles exclude or include locked roles based in param.
   *
   * @covers ::getRoles
   * @todo Move roles constants to a class/interface
   */
  public function testUserGetRoles() {
    $this
      ->assertEquals(array(
      RoleInterface::AUTHENTICATED_ID,
      'role_two',
    ), $this->users['user_three']
      ->getRoles());
    $this
      ->assertEquals(array(
      'role_two',
    ), $this->users['user_three']
      ->getRoles(TRUE));
  }

}

Members

Namesort descending Modifiers Type Description Overrides
UnitTestCase::$randomGenerator protected property The random generator.
UnitTestCase::$root protected property The app root.
UnitTestCase::assertArrayEquals protected function Asserts if two arrays are equal by sorting them first.
UnitTestCase::getBlockMockWithMachineName protected function Mocks a block with a block plugin.
UnitTestCase::getClassResolverStub protected function Returns a stub class resolver.
UnitTestCase::getConfigFactoryStub public function Returns a stub config factory that behaves according to the passed in array.
UnitTestCase::getConfigStorageStub public function Returns a stub config storage that returns the supplied configuration.
UnitTestCase::getContainerWithCacheTagsInvalidator protected function Sets up a container with a cache tags invalidator.
UnitTestCase::getRandomGenerator protected function Gets the random generator for the utility methods.
UnitTestCase::getStringTranslationStub public function Returns a stub translation manager that just returns the passed string.
UnitTestCase::randomMachineName public function Generates a unique random string containing letters and numbers.
UserSessionTest::$users protected property The user sessions used in the test
UserSessionTest::createUserSession protected function Setups a user session for the test. 1
UserSessionTest::providerTestHasPermission public function Provides test data for getHasPermission().
UserSessionTest::setUp protected function Overrides UnitTestCase::setUp
UserSessionTest::testHasPermission public function Tests the has permission method.
UserSessionTest::testUserGetRoles public function Tests the method getRoles exclude or include locked roles based in param. 1