class SearchNodeTranslationUITest

Same name and namespace in other branches
  1. 11.x core/modules/search/tests/src/Functional/SearchNodeTranslationUITest.php \Drupal\Tests\search\Functional\SearchNodeTranslationUITest

Tests search index rebuild on translated content deletion.

Attributes

#[Group('search')] #[RunTestsInSeparateProcesses]

Hierarchy

Expanded class hierarchy of SearchNodeTranslationUITest

File

core/modules/search/tests/src/Functional/SearchNodeTranslationUITest.php, line 15

Namespace

Drupal\Tests\search\Functional
View source
class SearchNodeTranslationUITest extends ContentTranslationTestBase {
  use LanguageTestTrait;
  
  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';
  
  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'content_translation',
    'node',
    'search',
  ];
  
  /**
   * {@inheritdoc}
   */
  protected function setUp() : void {
    $this->entityTypeId = 'node';
    $this->bundle = 'article';
    parent::setUp();
    // Create the bundle.
    $this->drupalCreateContentType([
      'type' => 'article',
      'title' => 'Article',
    ]);
    $this->doSetup();
    $this->drupalLogin($this->translator);
  }
  
  /**
   * Test deletion of translated content from search and index rebuild.
   */
  public function testSearchIndexRebuildOnTranslationDeletion() : void {
    $admin_user = $this->drupalCreateUser([
      'administer site configuration',
      'access administration pages',
      'administer content types',
      'delete content translations',
      'administer content translation',
      'translate any entity',
      'administer search',
      'search content',
      'delete any article content',
    ]);
    $this->drupalLogin($admin_user);
    // Create a node.
    $node = $this->drupalCreateNode([
      'type' => 'article',
    ]);
    // Add a French translation.
    $translation = $node->addTranslation('fr');
    $translation->title = 'First rev fr title';
    $translation->setNewRevision(FALSE);
    $translation->save();
    // Check if 1 page is listed for indexing.
    $this->drupalGet('admin/config/search/pages');
    $this->assertSession()
      ->pageTextContains('There is 1 item left to index.');
    // Run cron.
    $this->drupalGet('admin/config/system/cron');
    $this->getSession()
      ->getPage()
      ->pressButton('Run cron');
    // Assert no items are left for indexing.
    $this->drupalGet('admin/config/search/pages');
    $this->assertSession()
      ->pageTextContains('There are 0 items left to index.');
    // Search for French content.
    $this->drupalGet('search/node', [
      'query' => [
        'keys' => urlencode('First rev fr title'),
      ],
    ]);
    $this->assertSession()
      ->pageTextContains('First rev fr title');
    // Delete translation.
    $this->drupalGet('fr/node/' . $node->id() . '/delete');
    $this->getSession()
      ->getPage()
      ->pressButton('Delete French translation');
    // Run cron.
    $this->drupalGet('admin/config/system/cron');
    $this->getSession()
      ->getPage()
      ->pressButton('Run cron');
    // Assert no items are left for indexing.
    $this->drupalGet('admin/config/search/pages');
    $this->assertSession()
      ->pageTextContains('There are 0 items left to index.');
    // Search for French content.
    $this->drupalGet('search/node', [
      'query' => [
        'keys' => urlencode('First rev fr title'),
      ],
    ]);
    $this->assertSession()
      ->pageTextNotContains('First rev fr title');
  }

}

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