You are here

public function ContentLockBlockTest::testContentLockBlock in Content locking (anti-concurrent editing) 8

Same name and namespace in other branches
  1. 8.2 tests/src/Functional/ContentLockBlockTest.php \Drupal\Tests\content_lock\Functional\ContentLockBlockTest::testContentLockBlock()

Test simultaneous edit on block.

File

tests/src/Functional/ContentLockBlockTest.php, line 79

Class

ContentLockBlockTest
Block tests.

Namespace

Drupal\Tests\content_lock\Functional

Code

public function testContentLockBlock() {

  // Create block.
  $this
    ->createBlockContentType('basic', TRUE);
  $block1 = $this
    ->createBlockContent('Block 1');
  $admin = $this
    ->drupalCreateUser([
    'administer blocks',
    'administer content lock',
  ]);
  $user1 = $this
    ->drupalCreateUser([
    'administer blocks',
    'access content',
  ]);
  $user2 = $this
    ->drupalCreateUser([
    'administer blocks',
    'break content lock',
  ]);

  // We protect the bundle created.
  $this
    ->drupalLogin($admin);
  $edit = [
    'block_content[bundles][basic]' => 1,
  ];
  $this
    ->drupalPostForm('admin/config/content/content_lock', $edit, t('Save configuration'));

  // We lock block1.
  $this
    ->drupalLogin($user1);

  // Edit a node without saving.
  $this
    ->drupalGet("block/{$block1->id()}");
  $assert_session = $this
    ->assertSession();
  $assert_session
    ->pageTextContains(t('This content is now locked against simultaneous editing.'));

  // Other user can not edit block1.
  $this
    ->drupalLogin($user2);
  $this
    ->drupalGet("block/{$block1->id()}");
  $assert_session
    ->pageTextContains(t('This content is being edited by the user @name and is therefore locked to prevent other users changes.', [
    '@name' => $user1
      ->getDisplayName(),
  ]));
  $assert_session
    ->linkExists(t('Break lock'));
  $disabled_button = $this
    ->xpath('//input[@id=:id and @disabled="disabled"]', [
    ':id' => 'edit-submit',
  ]);
  $this
    ->assertTrue($disabled_button, t('The form cannot be submitted.'));

  // We save block1 and unlock it.
  $this
    ->drupalLogin($user1);
  $this
    ->drupalGet("block/{$block1->id()}");
  $assert_session
    ->pageTextContains(t('This content is now locked by you against simultaneous editing.'));
  $this
    ->drupalPostForm('/block/' . $block1
    ->id(), [], t('Save'));

  // We lock block1 with user2.
  $this
    ->drupalLogin($user2);

  // Edit a node without saving.
  $this
    ->drupalGet("block/{$block1->id()}");
  $assert_session
    ->pageTextContains(t('This content is now locked against simultaneous editing.'));

  // Other user can not edit block1.
  $this
    ->drupalLogin($user1);
  $this
    ->drupalGet("block/{$block1->id()}");
  $assert_session
    ->pageTextContains(t('This content is being edited by the user @name and is therefore locked to prevent other users changes.', [
    '@name' => $user2
      ->getDisplayName(),
  ]));
  $assert_session
    ->linkNotExists(t('Break lock'));
  $disabled_button = $this
    ->xpath('//input[@id=:id and @disabled="disabled"]', [
    ':id' => 'edit-submit',
  ]);
  $this
    ->assertTrue($disabled_button, t('The form cannot be submitted.'));

  // We unlock block1 with user2.
  $this
    ->drupalLogin($user2);

  // Edit a node without saving.
  $this
    ->drupalGet("block/{$block1->id()}");
  $assert_session
    ->pageTextContains(t('This content is now locked by you against simultaneous editing.'));
  $this
    ->drupalPostForm('/block/' . $block1
    ->id(), [], t('Save'));
  $assert_session
    ->pageTextContains(t('has been updated.'));
}