auto_entitylabel-8.x-3.x-dev/tests/src/Functional/PreserveTitlesOptionTest.php
tests/src/Functional/PreserveTitlesOptionTest.php
<?php namespace Drupal\Tests\auto_entitylabel\Functional; use Drupal\auto_entitylabel\AutoEntityLabelManager; use Drupal\Tests\BrowserTestBase; /** * Tests 'Preserve already created titles' option. * * @group auto_entitylabel * * @requires module token */ class PreserveTitlesOptionTest extends BrowserTestBase { /** * Node type. * * @var \Drupal\node\Entity\NodeType */ protected $nodeType; /** * Config factory service variable. * * @var \Drupal\Core\Config\ConfigFactoryInterface */ protected $configFactory; /** * User variable. * * @var bool|\Drupal\user\Entity\User|false */ protected $user; /** * Node storage variable. * * @var \Drupal\node\NodeStorageInterface */ protected $nodeStorage; /** * Modules to enable. * * @var array */ protected static $modules = [ 'system', 'user', 'node', 'filter', 'token', 'auto_entitylabel', ]; /** * {@inheritdoc} */ protected $defaultTheme = 'stark'; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); $this->user = $this->drupalCreateUser([], '', TRUE); $this->drupalLogin($this->user); $this->nodeType = $this->createContentType(['type' => 'page']); $this->configFactory = $this->container->get('config.factory'); $this->nodeStorage = $this->container->get('entity_type.manager')->getStorage('node'); } /** * Tests disabled 'Preserve already created titles'. */ public function testPreserveTitlesOptionDisabled() { $this->assertPreserveTitlesOption(FALSE, 10); } /** * Tests enabled 'Preserve already created titles'. */ public function testPreserveTitlesOptionEnabled() { $this->assertPreserveTitlesOption(TRUE, 10); } /** * Asserts that 'Preserve already created titles' option works correctly. * * @param bool $value * Value for 'preserve_titles' to be set. * @param int $numberOfNodes * Number of testing nodes to be created. */ public function assertPreserveTitlesOption(bool $value, int $numberOfNodes) { $editNodeId = rand(1, $numberOfNodes); $webAssert = $this->assertSession(); $this->createTestNodes($numberOfNodes, 'page'); $this->configFactory ->getEditable("auto_entitylabel.settings.node.{$this->nodeType->id()}") ->set('status', AutoEntityLabelManager::ENABLED) ->set('pattern', 'Test node [current-user:account-name]') ->set('preserve_titles', $value) ->save(); $this->drupalGet('/node/' . $editNodeId . '/edit'); $webAssert->buttonExists('Save')->click(); if ($value) { $page = $this->nodeStorage->load($editNodeId); $this->assertNotEquals('Test node ' . $this->user->getAccountName(), $page->get('title')->value); } else { $page = $this->nodeStorage->load($editNodeId); $this->assertEquals('Test node ' . $this->user->getAccountName(), $page->get('title')->value); } } /** * Creates number of dummy nodes of provided type. * * @param int $numberOfNodes * Number of nodes to be created. * @param string $nodeType * Type of node to be created. */ public function createTestNodes(int $numberOfNodes, string $nodeType) { for ($i = 0; $i < $numberOfNodes; $i++) { $this->drupalCreateNode([ 'type' => $nodeType, 'title' => 'Testing node ' . $nodeType . ' ' . $i, ]); } } }