Version 1
[yaffs-website] / web / core / modules / block_content / tests / src / Functional / BlockContentRevisionsTest.php
diff --git a/web/core/modules/block_content/tests/src/Functional/BlockContentRevisionsTest.php b/web/core/modules/block_content/tests/src/Functional/BlockContentRevisionsTest.php
new file mode 100644 (file)
index 0000000..fa88c64
--- /dev/null
@@ -0,0 +1,107 @@
+<?php
+
+namespace Drupal\Tests\block_content\Functional;
+
+use Drupal\block_content\Entity\BlockContent;
+use Drupal\user\Entity\User;
+use Drupal\user\UserInterface;
+
+/**
+ * Create a block with revisions.
+ *
+ * @group block_content
+ */
+class BlockContentRevisionsTest extends BlockContentTestBase {
+
+  /**
+   * Stores blocks created during the test.
+   * @var array
+   */
+  protected $blocks;
+
+  /**
+   * Stores log messages used during the test.
+   * @var array
+   */
+  protected $revisionLogs;
+
+  /**
+   * Sets the test up.
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    /** @var UserInterface $user */
+    $user = User::load(1);
+
+    // Create initial block.
+    $block = $this->createBlockContent('initial');
+
+    $blocks = [];
+    $logs = [];
+
+    // Get original block.
+    $blocks[] = $block->getRevisionId();
+    $logs[] = '';
+
+    // Create three revisions.
+    $revision_count = 3;
+    for ($i = 0; $i < $revision_count; $i++) {
+      $block->setNewRevision(TRUE);
+      $block->setRevisionLogMessage($this->randomMachineName(32));
+      $block->setRevisionUser($this->adminUser);
+      $block->setRevisionCreationTime(REQUEST_TIME);
+      $logs[] = $block->getRevisionLogMessage();
+      $block->save();
+      $blocks[] = $block->getRevisionId();
+    }
+
+    $this->blocks = $blocks;
+    $this->revisionLogs = $logs;
+  }
+
+  /**
+   * Checks block revision related operations.
+   */
+  public function testRevisions() {
+    $blocks = $this->blocks;
+    $logs = $this->revisionLogs;
+
+    foreach ($blocks as $delta => $revision_id) {
+      // Confirm the correct revision text appears.
+      /** @var \Drupal\block_content\BlockContentInterface  $loaded */
+      $loaded = $this->container->get('entity_type.manager')
+        ->getStorage('block_content')
+        ->loadRevision($revision_id);
+      // Verify revision log is the same.
+      $this->assertEqual($loaded->getRevisionLogMessage(), $logs[$delta], format_string('Correct log message found for revision @revision', [
+        '@revision' => $loaded->getRevisionId(),
+      ]));
+      if ($delta > 0) {
+        $this->assertTrue($loaded->getRevisionUser() instanceof UserInterface, 'Revision User found.');
+        $this->assertTrue(is_numeric($loaded->getRevisionUserId()), 'Revision User ID found.');
+        $this->assertTrue(is_numeric($loaded->getRevisionCreationTime()), 'Revision time found.');
+      }
+    }
+
+    // Confirm that this is the default revision.
+    $this->assertTrue($loaded->isDefaultRevision(), 'Third block revision is the default one.');
+
+    // Make a new revision and set it to not be default.
+    // This will create a new revision that is not "front facing".
+    // Save this as a non-default revision.
+    $loaded->setNewRevision();
+    $loaded->isDefaultRevision(FALSE);
+    $loaded->body = $this->randomMachineName(8);
+    $loaded->save();
+
+    $this->drupalGet('block/' . $loaded->id());
+    $this->assertNoText($loaded->body->value, 'Revision body text is not present on default version of block.');
+
+    // Verify that the non-default revision id is greater than the default
+    // revision id.
+    $default_revision = BlockContent::load($loaded->id());
+    $this->assertTrue($loaded->getRevisionId() > $default_revision->getRevisionId(), 'Revision id is greater than default revision id.');
+  }
+
+}