You are here

public function NodeOperationAccessTest::testRevisionOperations in Drupal 10

Tests revision operations.

@dataProvider providerTestRevisionOperations

Parameters

string $operation: A revision operation.

array $hasPermissionMap: A map of permissions, to whether they should be granted.

bool|null $assertAccess: Whether the access is allowed or denied.

bool|null $isDefaultRevision: Whether the node should be default revision, or NULL if not to expect it to be called.

File

core/modules/node/tests/src/Unit/NodeOperationAccessTest.php, line 59

Class

NodeOperationAccessTest
Tests node operations.

Namespace

Drupal\Tests\node\Unit

Code

public function testRevisionOperations($operation, array $hasPermissionMap, $assertAccess, $isDefaultRevision = NULL) {
  $account = $this
    ->createMock(AccountInterface::class);
  $account
    ->method('hasPermission')
    ->willReturnMap($hasPermissionMap);
  $entityType = $this
    ->createMock(EntityTypeInterface::class);
  $grants = $this
    ->createMock(NodeGrantDatabaseStorageInterface::class);
  $grants
    ->expects($this
    ->any())
    ->method('access')
    ->willReturn(AccessResult::neutral());
  $language = $this
    ->createMock(LanguageInterface::class);
  $language
    ->expects($this
    ->any())
    ->method('getId')
    ->will($this
    ->returnValue('de'));
  $nid = 333;

  /** @var \Drupal\node\NodeInterface|\PHPUnit\Framework\MockObject\MockObject $node */
  $node = $this
    ->createMock(NodeInterface::class);
  $node
    ->expects($this
    ->any())
    ->method('language')
    ->willReturn($language);
  $node
    ->expects($this
    ->any())
    ->method('id')
    ->willReturn($nid);
  $node
    ->expects($this
    ->any())
    ->method('getCacheContexts')
    ->willReturn([]);
  $node
    ->expects($this
    ->any())
    ->method('getCacheTags')
    ->willReturn([]);
  $node
    ->expects($this
    ->any())
    ->method('getCacheMaxAge')
    ->willReturn(-1);
  $node
    ->expects($this
    ->any())
    ->method('getEntityTypeId')
    ->willReturn('node');
  if (isset($isDefaultRevision)) {
    $node
      ->expects($this
      ->atLeastOnce())
      ->method('isDefaultRevision')
      ->willReturn($isDefaultRevision);
  }
  $nodeStorage = $this
    ->createMock(NodeStorageInterface::class);
  $nodeStorage
    ->expects($this
    ->any())
    ->method('load')
    ->with($nid)
    ->willReturn($node);
  $entityTypeManager = $this
    ->createMock(EntityTypeManagerInterface::class);
  $entityTypeManager
    ->expects($this
    ->any())
    ->method('getStorage')
    ->with('node')
    ->willReturn($nodeStorage);
  $moduleHandler = $this
    ->createMock(ModuleHandlerInterface::class);
  $moduleHandler
    ->expects($this
    ->any())
    ->method('invokeAll')
    ->willReturn([]);
  $accessControl = new NodeAccessControlHandler($entityType, $grants, $entityTypeManager);
  $accessControl
    ->setModuleHandler($moduleHandler);
  $nodeType = $this
    ->createMock(RevisionableEntityBundleInterface::class);
  $typeProperty = new \stdClass();
  $typeProperty->entity = $nodeType;
  $node->type = $typeProperty;
  $access = $accessControl
    ->access($node, $operation, $account, FALSE);
  $this
    ->assertEquals($assertAccess, $access);
}