NodeRevisionsAuthorTest.php
Namespace
Drupal\Tests\node\FunctionalFile
-
core/
modules/ node/ tests/ src/ Functional/ NodeRevisionsAuthorTest.php
View source
<?php
declare (strict_types=1);
namespace Drupal\Tests\node\Functional;
use Drupal\Core\Url;
/**
* Tests reverting node revisions correctly sets authorship information.
*
* @group node
*/
class NodeRevisionsAuthorTest extends NodeTestBase {
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* Tests node authorship is retained after reverting revisions.
*/
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());
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
NodeRevisionsAuthorTest | Tests reverting node revisions correctly sets authorship information. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.