function EntityCreateAccessCheckTest::testAccess

Same name in other branches
  1. 8.9.x core/tests/Drupal/Tests/Core/Entity/EntityCreateAccessCheckTest.php \Drupal\Tests\Core\Entity\EntityCreateAccessCheckTest::testAccess()
  2. 10 core/tests/Drupal/Tests/Core/Entity/EntityCreateAccessCheckTest.php \Drupal\Tests\Core\Entity\EntityCreateAccessCheckTest::testAccess()
  3. 11.x core/tests/Drupal/Tests/Core/Entity/EntityCreateAccessCheckTest.php \Drupal\Tests\Core\Entity\EntityCreateAccessCheckTest::testAccess()

Tests the method for checking access to routes.

@dataProvider providerTestAccess

File

core/tests/Drupal/Tests/Core/Entity/EntityCreateAccessCheckTest.php, line 71

Class

EntityCreateAccessCheckTest
@coversDefaultClass \Drupal\Core\Entity\EntityCreateAccessCheck

Namespace

Drupal\Tests\Core\Entity

Code

public function testAccess($entity_bundle, $requirement, $access, $expected, $expect_permission_context = TRUE) {
    // Set up the access result objects for allowing or denying access.
    $access_result = $access ? AccessResult::allowed()->cachePerPermissions() : AccessResult::neutral()->cachePerPermissions();
    $expected_access_result = $expected ? AccessResult::allowed() : AccessResult::neutral();
    if ($expect_permission_context) {
        $expected_access_result->cachePerPermissions();
    }
    if (!$entity_bundle && !$expect_permission_context) {
        $expected_access_result->setReason("Could not find '{bundle_argument}' request argument, therefore cannot check create access.");
    }
    // Don't expect a call to the access control handler when we have a bundle
    // argument requirement but no bundle is provided.
    if ($entity_bundle || strpos($requirement, '{') === FALSE) {
        $access_control_handler = $this->createMock('Drupal\\Core\\Entity\\EntityAccessControlHandlerInterface');
        $access_control_handler->expects($this->once())
            ->method('createAccess')
            ->with($entity_bundle)
            ->willReturn($access_result);
        $this->entityTypeManager
            ->expects($this->any())
            ->method('getAccessControlHandler')
            ->willReturn($access_control_handler);
    }
    $applies_check = new EntityCreateAccessCheck($this->entityTypeManager);
    $route = $this->getMockBuilder('Symfony\\Component\\Routing\\Route')
        ->disableOriginalConstructor()
        ->getMock();
    $route->expects($this->any())
        ->method('getRequirement')
        ->with('_entity_create_access')
        ->willReturn($requirement);
    $raw_variables = new ParameterBag();
    if ($entity_bundle) {
        $raw_variables->set('bundle_argument', $entity_bundle);
    }
    $route_match = $this->createMock('Drupal\\Core\\Routing\\RouteMatchInterface');
    $route_match->expects($this->any())
        ->method('getRawParameters')
        ->willReturn($raw_variables);
    $account = $this->createMock('Drupal\\Core\\Session\\AccountInterface');
    $this->assertEquals($expected_access_result, $applies_check->access($route, $route_match, $account));
}

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