function NodeRevisionsAuthorTest::testNodeRevisionRevertAuthors

Tests node authorship is retained after reverting revisions.

File

core/modules/node/tests/src/Functional/NodeRevisionsAuthorTest.php, line 24

Class

NodeRevisionsAuthorTest
Tests reverting node revisions correctly sets authorship information.

Namespace

Drupal\Tests\node\Functional

Code

public function testNodeRevisionRevertAuthors() : void {
    // Create and log in user.
    $initialUser = $this->drupalCreateUser([
        'view page revisions',
        'revert page revisions',
        'edit any page content',
    ]);
    $initialRevisionUser = $this->drupalCreateUser();
    // Third user is an author only and needs no permissions
    $initialRevisionAuthor = $this->drupalCreateUser();
    // Create initial node (author: $user1).
    $this->drupalLogin($initialUser);
    $node = $this->drupalCreateNode();
    $originalRevisionId = $node->getRevisionId();
    $originalBody = $node->body->value;
    $originalTitle = $node->getTitle();
    // Create a revision (as $initialUser) showing $initialRevisionAuthor
    // as author.
    $node->setRevisionLogMessage('Changed author');
    $revisedTitle = $this->randomMachineName();
    $node->setTitle($revisedTitle);
    $revisedBody = $this->randomMachineName(32);
    $node->set('body', [
        'value' => $revisedBody,
        'format' => filter_default_format(),
    ]);
    $node->setOwnerId($initialRevisionAuthor->id());
    $node->setRevisionUserId($initialRevisionUser->id());
    $node->setNewRevision();
    $node->save();
    $revisedRevisionId = $node->getRevisionId();
    $nodeStorage = \Drupal::entityTypeManager()->getStorage('node');
    self::assertEquals($node->getOwnerId(), $initialRevisionAuthor->id());
    self::assertEquals($node->getRevisionUserId(), $initialRevisionUser->id());
    // Revert to the original node revision.
    $this->drupalGet(Url::fromRoute('node.revision_revert_confirm', [
        'node' => $node->id(),
        'node_revision' => $originalRevisionId,
    ]));
    $this->submitForm([], 'Revert');
    $this->assertSession()
        ->pageTextContains(\sprintf('Basic page %s has been reverted', $originalTitle));
    // With the revert done, reload the node and verify that the authorship
    // fields have reverted correctly.
    $nodeStorage->resetCache([
        $node->id(),
    ]);
    
    /** @var \Drupal\node\NodeInterface $revertedNode */
    $revertedNode = $nodeStorage->load($node->id());
    self::assertEquals($originalBody, $revertedNode->body->value);
    self::assertEquals($initialUser->id(), $revertedNode->getOwnerId());
    self::assertEquals($initialUser->id(), $revertedNode->getRevisionUserId());
    // Revert again to the revised version and check that node author and
    // revision author fields are correct.
    // Revert to the original node.
    $this->drupalGet(Url::fromRoute('node.revision_revert_confirm', [
        'node' => $revertedNode->id(),
        'node_revision' => $revisedRevisionId,
    ]));
    $this->submitForm([], 'Revert');
    $this->assertSession()
        ->pageTextContains(\sprintf('Basic page %s has been reverted', $revisedTitle));
    // With the reversion done, reload the node and verify that the
    // authorship fields have reverted correctly.
    $nodeStorage->resetCache([
        $revertedNode->id(),
    ]);
    
    /** @var \Drupal\node\NodeInterface $re_reverted_node */
    $re_reverted_node = $nodeStorage->load($revertedNode->id());
    self::assertEquals($revisedBody, $re_reverted_node->body->value);
    self::assertEquals($initialRevisionAuthor->id(), $re_reverted_node->getOwnerId());
    // The new revision user will be the current logged in user as set in
    // NodeRevisionRevertForm.
    self::assertEquals($initialUser->id(), $re_reverted_node->getRevisionUserId());
}

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