editor = $this->drupalCreateUser([ 'administer nodes', 'edit any page content', 'view page revisions', 'access user profiles', ]); } /** * Checks that unchecking 'Create new revision' works when editing a node. */ public function testNodeFormSaveWithoutRevision() { $this->drupalLogin($this->editor); $node_storage = $this->container->get('entity.manager')->getStorage('node'); // Set page revision setting 'create new revision'. This will mean new // revisions are created by default when the node is edited. $type = NodeType::load('page'); $type->setNewRevision(TRUE); $type->save(); // Create the node. $node = $this->drupalCreateNode(); // Verify the checkbox is checked on the node edit form. $this->drupalGet('node/' . $node->id() . '/edit'); $this->assertFieldChecked('edit-revision', "'Create new revision' checkbox is checked"); // Uncheck the create new revision checkbox and save the node. $edit = ['revision' => FALSE]; $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save')); // Load the node again and check the revision is the same as before. $node_storage->resetCache([$node->id()]); $node_revision = $node_storage->load($node->id(), TRUE); $this->assertEqual($node_revision->getRevisionId(), $node->getRevisionId(), "After an existing node is saved with 'Create new revision' unchecked, a new revision is not created."); // Verify the checkbox is checked on the node edit form. $this->drupalGet('node/' . $node->id() . '/edit'); $this->assertFieldChecked('edit-revision', "'Create new revision' checkbox is checked"); // Submit the form without changing the checkbox. $edit = []; $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save')); // Load the node again and check the revision is different from before. $node_storage->resetCache([$node->id()]); $node_revision = $node_storage->load($node->id()); $this->assertNotEqual($node_revision->getRevisionId(), $node->getRevisionId(), "After an existing node is saved with 'Create new revision' checked, a new revision is created."); } /** * Checks HTML double escaping of revision logs. */ public function testNodeRevisionDoubleEscapeFix() { $this->drupalLogin($this->editor); $nodes = []; // Create the node. $node = $this->drupalCreateNode(); $username = [ '#theme' => 'username', '#account' => $this->editor, ]; $editor = \Drupal::service('renderer')->renderPlain($username); // Get original node. $nodes[] = clone $node; // Create revision with a random title and body and update variables. $node->title = $this->randomMachineName(); $node->body = [ 'value' => $this->randomMachineName(32), 'format' => filter_default_format(), ]; $node->setNewRevision(); $revision_log = 'Revision message with markup.'; $node->revision_log->value = $revision_log; $node->save(); // Make sure we get revision information. $node = Node::load($node->id()); $nodes[] = clone $node; $this->drupalGet('node/' . $node->id() . '/revisions'); // Assert the old revision message. $date = format_date($nodes[0]->revision_timestamp->value, 'short'); $url = new Url('entity.node.revision', ['node' => $nodes[0]->id(), 'node_revision' => $nodes[0]->getRevisionId()]); $this->assertRaw(\Drupal::l($date, $url) . ' by ' . $editor); // Assert the current revision message. $date = format_date($nodes[1]->revision_timestamp->value, 'short'); $this->assertRaw($nodes[1]->link($date) . ' by ' . $editor . '

' . $revision_log . '

'); } /** * Checks the Revisions tab. */ public function testNodeRevisionsTabWithDefaultRevision() { $this->drupalLogin($this->editor); // Create the node. $node = $this->drupalCreateNode(); $storage = \Drupal::entityTypeManager()->getStorage($node->getEntityTypeId()); // Create a new revision based on the default revision. // Revision 2. $node = $storage->load($node->id()); $node->setNewRevision(TRUE); $node->save(); // Revision 3. $node = $storage->load($node->id()); $node->setNewRevision(TRUE); $node->save(); // Revision 4. // Trigger translation changes in order to show the revision. $node = $storage->load($node->id()); $node->setTitle($this->randomString()); $node->isDefaultRevision(FALSE); $node->setNewRevision(TRUE); $node->save(); // Revision 5. $node = $storage->load($node->id()); $node->isDefaultRevision(FALSE); $node->setNewRevision(TRUE); $node->save(); $node_id = $node->id(); $this->drupalGet('node/' . $node_id . '/revisions'); // Verify that the default revision can be an older revision than the latest // one. // Assert that the revisions with translations changes are shown: 1 and 4. $this->assertLinkByHref('/node/' . $node_id . '/revisions/1/revert'); $this->assertLinkByHref('/node/' . $node_id . '/revisions/4/revert'); // Assert that the revisions without translations changes are filtered out: // 2, 3 and 5. $this->assertNoLinkByHref('/node/' . $node_id . '/revisions/2/revert'); $this->assertNoLinkByHref('/node/' . $node_id . '/revisions/3/revert'); $this->assertNoLinkByHref('/node/' . $node_id . '/revisions/5/revert'); } }