UserSessionTest.php 4.92 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
<?php

/**
 * @file
 * Contains \Drupal\Tests\Core\Session\UserSessionTest.
 */

namespace Drupal\Tests\Core\Session;

use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\Session\UserSession;
use Drupal\Tests\UnitTestCase;

/**
 * Tests the user session object.
 *
 * @see \Drupal\Core\Session\UserSession
 */
class UserSessionTest extends UnitTestCase {

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

  public static function getInfo() {
    return array(
      'name' => 'User session object',
      'description' => 'Tests the user session object.',
      'group' => 'Session',
    );
  }

  /**
   * 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.
   *
   * @return \Drupal\Core\Session\AccountInterface
   *   The created user session.
   */
  protected function createUserSession(array $rids = array()) {
    return new UserSession(array('roles' => $rids));
  }

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

    $roles = array();
70
    $roles['role_one'] = $this->getMockBuilder('Drupal\user\Entity\Role')
71 72 73 74 75 76 77 78 79 80 81
      ->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),
      )));

82
    $roles['role_two'] = $this->getMockBuilder('Drupal\user\Entity\Role')
83 84 85 86 87 88 89 90 91 92 93
      ->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),
      )));

94
    $role_storage = $this->getMockBuilder('Drupal\user\RoleStorage')
95 96 97 98 99 100 101 102 103 104 105 106 107
      ->disableOriginalConstructor()
      ->setMethods(array('loadMultiple'))
      ->getMock();
    $role_storage->expects($this->any())
      ->method('loadMultiple')
      ->will($this->returnValueMap(array(
        array(array(), array()),
        array(NULL, $roles),
        array(array('role_one'), array($roles['role_one'])),
        array(array('role_two'), array($roles['role_two'])),
        array(array('role_one', 'role_two'), array($roles['role_one'], $roles['role_two'])),
      )));

108
    $entity_manager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
109
    $entity_manager->expects($this->any())
110
      ->method('getStorage')
111 112 113
      ->with($this->equalTo('user_role'))
      ->will($this->returnValue($role_storage));
    $container = new ContainerBuilder();
114
    $container->set('entity.manager', $entity_manager);
115 116 117 118
    \Drupal::setContainer($container);

    $this->users['user_one'] = $this->createUserSession(array('role_one'));
    $this->users['user_two'] = $this->createUserSession(array('role_one', 'role_two'));
119
    $this->users['user_three'] = $this->createUserSession(array('role_two', 'authenticated'));
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
    $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));
    }
  }

146 147 148 149 150 151 152 153 154 155 156
  /**
   * Tests the method getRoles exclude or include locked roles based in param.
   *
   * @see \Drupal\Core\Session\UserSession::getRoles()
   * @todo Move roles constants to a class/interface
   */
  public function testUserGetRoles() {
    $this->assertEquals(array('role_two', 'authenticated'), $this->users['user_three']->getRoles());
    $this->assertEquals(array('role_two'), $this->users['user_three']->getRoles(TRUE));
  }

157
}