class UserSessionTest
@coversDefaultClass \Drupal\Core\Session\UserSession
      
    
@group Session
Hierarchy
- class \Drupal\Tests\UnitTestCase uses \Drupal\Tests\Traits\PhpUnitWarnings, \Drupal\Tests\PhpUnitCompatibilityTrait, \Symfony\Bridge\PhpUnit\ExpectDeprecationTrait extends \PHPUnit\Framework\TestCase
- class \Drupal\Tests\Core\Session\UserSessionTest extends \Drupal\Tests\UnitTestCase
 
 
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  
File
- 
              core/
tests/ Drupal/ Tests/ Core/ Session/ UserSessionTest.php, line 15  
Namespace
Drupal\Tests\Core\SessionView source
class UserSessionTest extends UnitTestCase {
  
  /**
   * The user sessions used in the test.
   *
   * @var \Drupal\Core\Session\AccountInterface[]
   */
  protected $users = [];
  
  /**
   * Provides test data for getHasPermission().
   *
   * @return array
   */
  public function providerTestHasPermission() {
    $data = [];
    $data[] = [
      'example permission',
      [
        'user_one',
        'user_two',
      ],
      [
        'user_last',
      ],
    ];
    $data[] = [
      'another example permission',
      [
        'user_two',
      ],
      [
        'user_one',
        'user_last',
      ],
    ];
    $data[] = [
      'final example permission',
      [],
      [
        '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 = [], $authenticated = FALSE) {
    array_unshift($rids, $authenticated ? RoleInterface::AUTHENTICATED_ID : RoleInterface::ANONYMOUS_ID);
    return new UserSession([
      'roles' => $rids,
    ]);
  }
  
  /**
   * {@inheritdoc}
   */
  protected function setUp() : void {
    parent::setUp();
    $roles = [];
    $roles['role_one'] = $this->getMockBuilder('Drupal\\user\\Entity\\Role')
      ->disableOriginalConstructor()
      ->onlyMethods([
      'hasPermission',
    ])
      ->getMock();
    $roles['role_one']->expects($this->any())
      ->method('hasPermission')
      ->willReturnMap([
      [
        'example permission',
        TRUE,
      ],
      [
        'another example permission',
        FALSE,
      ],
      [
        'last example permission',
        FALSE,
      ],
    ]);
    $roles['role_two'] = $this->getMockBuilder('Drupal\\user\\Entity\\Role')
      ->disableOriginalConstructor()
      ->onlyMethods([
      'hasPermission',
    ])
      ->getMock();
    $roles['role_two']->expects($this->any())
      ->method('hasPermission')
      ->willReturnMap([
      [
        'example permission',
        TRUE,
      ],
      [
        'another example permission',
        TRUE,
      ],
      [
        'last example permission',
        FALSE,
      ],
    ]);
    $roles['anonymous'] = $this->getMockBuilder('Drupal\\user\\Entity\\Role')
      ->disableOriginalConstructor()
      ->onlyMethods([
      'hasPermission',
    ])
      ->getMock();
    $roles['anonymous']->expects($this->any())
      ->method('hasPermission')
      ->willReturnMap([
      [
        'example permission',
        FALSE,
      ],
      [
        'another example permission',
        FALSE,
      ],
      [
        'last example permission',
        FALSE,
      ],
    ]);
    $role_storage = $this->getMockBuilder('Drupal\\user\\RoleStorage')
      ->setConstructorArgs([
      'role',
      new MemoryCache(),
    ])
      ->disableOriginalConstructor()
      ->onlyMethods([
      'loadMultiple',
    ])
      ->getMock();
    $role_storage->expects($this->any())
      ->method('loadMultiple')
      ->willReturnMap([
      [
        [],
        [],
      ],
      [
        NULL,
        $roles,
      ],
      [
        [
          'anonymous',
        ],
        [
          $roles['anonymous'],
        ],
      ],
      [
        [
          'anonymous',
          'role_one',
        ],
        [
          $roles['role_one'],
        ],
      ],
      [
        [
          'anonymous',
          'role_two',
        ],
        [
          $roles['role_two'],
        ],
      ],
      [
        [
          'anonymous',
          'role_one',
          'role_two',
        ],
        [
          $roles['role_one'],
          $roles['role_two'],
        ],
      ],
    ]);
    $entity_type_manager = $this->createMock('Drupal\\Core\\Entity\\EntityTypeManagerInterface');
    $entity_type_manager->expects($this->any())
      ->method('getStorage')
      ->with($this->equalTo('user_role'))
      ->willReturn($role_storage);
    $container = new ContainerBuilder();
    $container->set('entity_type.manager', $entity_type_manager);
    \Drupal::setContainer($container);
    $this->users['user_one'] = $this->createUserSession([
      'role_one',
    ]);
    $this->users['user_two'] = $this->createUserSession([
      'role_one',
      'role_two',
    ]);
    $this->users['user_three'] = $this->createUserSession([
      '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([
      RoleInterface::AUTHENTICATED_ID,
      'role_two',
    ], $this->users['user_three']
      ->getRoles());
    $this->assertEquals([
      'role_two',
    ], $this->users['user_three']
      ->getRoles(TRUE));
  }
}
Members
| Title Sort descending | Deprecated | Modifiers | Object type | Summary | Overriden Title | Overrides | 
|---|---|---|---|---|---|---|
| PhpUnitWarnings::$deprecationWarnings | private static | property | Deprecation warnings from PHPUnit to raise with @trigger_error(). | |||
| PhpUnitWarnings::addWarning | public | function | Converts PHPUnit deprecation warnings to E_USER_DEPRECATED. | |||
| UnitTestCase::$randomGenerator | protected | property | The random generator. | |||
| UnitTestCase::$root | protected | property | The app root. | 1 | ||
| UnitTestCase::assertArrayEquals | Deprecated | protected | function | Asserts if two arrays are equal by sorting them first. | ||
| UnitTestCase::getClassResolverStub | protected | function | Returns a stub class resolver. | |||
| UnitTestCase::getConfigFactoryStub | public | function | Returns a stub config factory that behaves according to the passed 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. | |||
| UnitTestCase::setUpBeforeClass | public static | function | ||||
| 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 | 
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.