You are here

public function LayoutBuilderContentModerationIntegrationTest::testLayoutModeration in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/content_moderation/tests/src/Functional/LayoutBuilderContentModerationIntegrationTest.php \Drupal\Tests\content_moderation\Functional\LayoutBuilderContentModerationIntegrationTest::testLayoutModeration()

Tests that Layout changes are respected by Content Moderation.

File

core/modules/content_moderation/tests/src/Functional/LayoutBuilderContentModerationIntegrationTest.php, line 85

Class

LayoutBuilderContentModerationIntegrationTest
Tests Content Moderation's integration with Layout Builder.

Namespace

Drupal\Tests\content_moderation\Functional

Code

public function testLayoutModeration() {
  $page = $this
    ->getSession()
    ->getPage();
  $assert_session = $this
    ->assertSession();

  // Create an unpublished node. Revision count: 1.
  $node = $this
    ->createNode([
    'type' => 'bundle_with_section_field',
    'title' => 'The first node title',
    'body' => [
      [
        'value' => 'The first node body',
      ],
    ],
  ]);
  _menu_ui_node_save($node, [
    'title' => 'bar',
    'menu_name' => 'main',
    'description' => 'view bar',
    'parent' => '',
  ]);
  $this
    ->drupalGet($node
    ->toUrl());

  // Publish the node. Revision count: 2.
  $page
    ->fillField('new_state', 'published');
  $page
    ->pressButton('Apply');

  // Modify the layout.
  $page
    ->clickLink('Layout');
  $assert_session
    ->checkboxChecked('revision');
  $assert_session
    ->fieldDisabled('revision');
  $page
    ->clickLink('Add block');
  $page
    ->clickLink('Powered by Drupal');
  $page
    ->pressButton('Add block');

  // Save the node as a draft. Revision count: 3.
  $page
    ->fillField('moderation_state[0][state]', 'draft');
  $page
    ->pressButton('Save layout');

  // Block is visible on the revision page.
  $assert_session
    ->addressEquals("node/{$node->id()}/latest");
  $assert_session
    ->pageTextContains('Powered by Drupal');

  // Block is visible on the layout form.
  $page
    ->clickLink('Layout');
  $assert_session
    ->pageTextContains('Powered by Drupal');

  // Block is not visible on the live node page.
  $page
    ->clickLink('View');
  $assert_session
    ->pageTextNotContains('Powered by Drupal');

  // Publish the node. Revision count: 4.
  $page
    ->clickLink('Latest version');
  $page
    ->fillField('new_state', 'published');
  $page
    ->pressButton('Apply');

  // Block is visible on the live node page.
  $assert_session
    ->pageTextContains('Powered by Drupal');

  // Revert to the previous revision.
  $page
    ->clickLink('Revisions');

  // Assert that there are 4 total revisions and 3 revert links.
  $assert_session
    ->elementsCount('named', [
    'link',
    'Revert',
  ], 3);

  // Revert to the 2nd revision before modifying the layout.
  $this
    ->clickLink('Revert', 1);
  $page
    ->pressButton('Revert');
  $page
    ->clickLink('View');
  $assert_session
    ->pageTextNotContains('Powered by Drupal');
}