BlockContentRevisionsTest.php

Same filename in this branch
  1. 10 core/modules/block_content/tests/src/Kernel/BlockContentRevisionsTest.php
Same filename and directory in other branches
  1. 9 core/modules/block_content/tests/src/Functional/BlockContentRevisionsTest.php
  2. 8.9.x core/modules/block_content/tests/src/Functional/BlockContentRevisionsTest.php
  3. 11.x core/modules/block_content/tests/src/Kernel/BlockContentRevisionsTest.php
  4. 11.x core/modules/block_content/tests/src/Functional/BlockContentRevisionsTest.php

Namespace

Drupal\Tests\block_content\Functional

File

core/modules/block_content/tests/src/Functional/BlockContentRevisionsTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\block_content\Functional;

use Drupal\block_content\Entity\BlockContent;
use Drupal\user\UserInterface;

/**
 * Create a block with revisions.
 *
 * @group block_content
 */
class BlockContentRevisionsTest extends BlockContentTestBase {
  
  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';
  
  /**
   * 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() : void {
    parent::setUp();
    // 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(time());
      $logs[] = $block->getRevisionLogMessage();
      $block->save();
      $blocks[] = $block->getRevisionId();
    }
    $this->blocks = $blocks;
    $this->revisionLogs = $logs;
  }
  
  /**
   * Checks block revision related operations.
   */
  public function testRevisions() : void {
    $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->assertEquals($logs[$delta], $loaded->getRevisionLogMessage(), "Correct log message found for revision {$revision_id}");
      if ($delta > 0) {
        $this->assertInstanceOf(UserInterface::class, $loaded->getRevisionUser());
        $this->assertIsNumeric($loaded->getRevisionUserId());
        $this->assertIsNumeric($loaded->getRevisionCreationTime());
      }
    }
    // 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();
    // Confirm that revision body text is not present on default version of
    // block.
    $this->drupalGet('admin/content/block/' . $loaded->id());
    $this->assertSession()
      ->pageTextNotContains($loaded->body->value);
    // Verify that the non-default revision id is greater than the default
    // revision id.
    $default_revision = BlockContent::load($loaded->id());
    // Verify that the revision ID is greater than the default revision ID.
    $this->assertGreaterThan($default_revision->getRevisionId(), $loaded->getRevisionId());
  }

}

Classes

Title Deprecated Summary
BlockContentRevisionsTest Create a block with revisions.

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