You are here

public function BlockFormTest::testGetUniqueMachineName in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/block/tests/src/Unit/BlockFormTest.php \Drupal\Tests\block\Unit\BlockFormTest::testGetUniqueMachineName()

Tests the unique machine name generator.

See also

\Drupal\block\BlockForm::getUniqueMachineName()

File

core/modules/block/tests/src/Unit/BlockFormTest.php, line 118

Class

BlockFormTest
@coversDefaultClass \Drupal\block\BlockForm @group block

Namespace

Drupal\Tests\block\Unit

Code

public function testGetUniqueMachineName() {
  $blocks = [];
  $blocks['test'] = $this
    ->getBlockMockWithMachineName('test');
  $blocks['other_test'] = $this
    ->getBlockMockWithMachineName('other_test');
  $blocks['other_test_1'] = $this
    ->getBlockMockWithMachineName('other_test');
  $blocks['other_test_2'] = $this
    ->getBlockMockWithMachineName('other_test');
  $query = $this
    ->createMock('Drupal\\Core\\Entity\\Query\\QueryInterface');
  $query
    ->expects($this
    ->exactly(5))
    ->method('condition')
    ->will($this
    ->returnValue($query));
  $query
    ->expects($this
    ->exactly(5))
    ->method('execute')
    ->will($this
    ->returnValue([
    'test',
    'other_test',
    'other_test_1',
    'other_test_2',
  ]));
  $this->storage
    ->expects($this
    ->exactly(5))
    ->method('getQuery')
    ->will($this
    ->returnValue($query));
  $block_form_controller = new BlockForm($this->entityTypeManager, $this->conditionManager, $this->contextRepository, $this->language, $this->themeHandler, $this->pluginFormFactory
    ->reveal());

  // Ensure that the block with just one other instance gets the next available
  // name suggestion.
  $this
    ->assertEquals('test_2', $block_form_controller
    ->getUniqueMachineName($blocks['test']));

  // Ensure that the block with already three instances (_0, _1, _2) gets the
  // 4th available name.
  $this
    ->assertEquals('other_test_3', $block_form_controller
    ->getUniqueMachineName($blocks['other_test']));
  $this
    ->assertEquals('other_test_3', $block_form_controller
    ->getUniqueMachineName($blocks['other_test_1']));
  $this
    ->assertEquals('other_test_3', $block_form_controller
    ->getUniqueMachineName($blocks['other_test_2']));

  // Ensure that a block without an instance yet gets the suggestion as
  // unique machine name.
  $last_block = $this
    ->getBlockMockWithMachineName('last_test');
  $this
    ->assertEquals('last_test', $block_form_controller
    ->getUniqueMachineName($last_block));
}