You are here

public function EntityCreateAccessCheckTest::testAccess in Drupal 8

Same name and namespace in other branches
  1. 9 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()

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)
      ->will($this
      ->returnValue($access_result));
    $this->entityTypeManager
      ->expects($this
      ->any())
      ->method('getAccessControlHandler')
      ->will($this
      ->returnValue($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')
    ->will($this
    ->returnValue($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')
    ->will($this
    ->returnValue($raw_variables));
  $account = $this
    ->createMock('Drupal\\Core\\Session\\AccountInterface');
  $this
    ->assertEquals($expected_access_result, $applies_check
    ->access($route, $route_match, $account));
}