search_api-8.x-1.15/tests/src/Functional/LanguageIntegrationTest.php

tests/src/Functional/LanguageIntegrationTest.php
<?php

namespace Drupal\Tests\search_api\Functional;

use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\search_api\Entity\Index;

/**
 * Tests the overall functionality of indexing specific logic.
 *
 * @group search_api
 */
class LanguageIntegrationTest extends SearchApiBrowserTestBase {

  /**
   * {@inheritdoc}
   */
  public static $modules = [
    'node',
    'search_api',
    'search_api_test',
    'language',
  ];

  /**
   * {@inheritdoc}
   */
  public function setUp() {
    parent::setUp();

    // Add extra languages.
    ConfigurableLanguage::createFromLangcode('nl')->save();
    ConfigurableLanguage::createFromLangcode('xx-lolspeak')->save();

    // Create an index and server to work with.
    $this->getTestServer();
    $this->getTestIndex();

    // Log in, so we can test all the things.
    $this->drupalLogin($this->adminUser);
  }

  /**
   * Tests indexing with different language settings trough the UI.
   */
  public function testIndexSettings() {
    // Create 2 articles.
    $article1 = $this->drupalCreateNode(['type' => 'article']);
    $article2 = $this->drupalCreateNode(['type' => 'article']);

    // Those 2 new nodes should be added to the tracking table immediately.
    $tracked_items = $this->countTrackedItems();
    $this->assertEquals(2, $tracked_items, 'Two items are tracked.');

    // Add translations.
    $translation = ['title' => 'test NL', 'body' => 'NL body'];
    $article1->addTranslation('nl', $translation)->save();
    $translation = ['title' => 'test2 NL', 'body' => 'NL body2'];
    $article2->addTranslation('nl', $translation)->save();
    $translation = ['title' => 'cats', 'body' => 'Cats test'];
    $article1->addTranslation('xx-lolspeak', $translation)->save();

    // The translations should be tracked as well, so we have a total of 5
    // indexed items.
    $tracked_items = $this->countTrackedItems();
    $this->assertEquals(5, $tracked_items, 'Five items are tracked.');

    // Clear index.
    $this->drupalGet($this->getIndexPath());
    $this->submitForm([], 'Clear all indexed data');
    $this->submitForm([], 'Confirm');

    // Make sure all 5 items are successfully indexed.
    $this->drupalGet($this->getIndexPath());
    $this->submitForm([], 'Index now');
    $this->checkForMetaRefresh();
    $this->assertSession()->pageTextContains('Successfully indexed 5 items');

    // Change the datasource to disallow indexing of dutch.
    $form_values = [
      'datasource_configs[entity:node][languages][default]' => 1,
      'datasource_configs[entity:node][languages][selected][nl]' => 1,
    ];
    $this->drupalGet($this->getIndexPath('edit'));
    $this->submitForm($form_values, 'Save');
    $this->checkForMetaRefresh();
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()->pageTextContains('The index was successfully saved.');

    // Make sure that we only have 3 indexed items now. The 2 original nodes
    // + 1 translation in lolspeak, the 2 dutch translations should be ignored.
    $this->drupalGet($this->getIndexPath());
    $this->submitForm([], 'Index now');
    $this->checkForMetaRefresh();
    $this->assertSession()->pageTextContains('Successfully indexed 3 items');

    // Change the datasource to only allow indexing of dutch.
    $form_values = [
      'datasource_configs[entity:node][languages][default]' => 0,
      'datasource_configs[entity:node][languages][selected][nl]' => 1,
      'datasource_configs[entity:node][bundles][default]' => 0,
      'datasource_configs[entity:node][bundles][selected][article]' => 1,
    ];
    $this->drupalGet($this->getIndexPath('edit'));
    $this->submitForm($form_values, 'Save');
    $this->checkForMetaRefresh();
    $this->assertSession()->statusCodeEquals(200);
    // Completed 1 of 1.
    $this->assertSession()->pageTextContains('The index was successfully saved.');

    // Make sure that we only have 2 index items. The only indexed items should
    // be the dutch translations.
    $this->drupalGet($this->getIndexPath());
    $this->submitForm([], 'Index now');
    $this->checkForMetaRefresh();
    $this->assertSession()->pageTextContains('Successfully indexed 2 items');
  }

  /**
   * Counts the number of tracked items in the test index.
   *
   * @return int
   *   The number of tracked items in the test index.
   */
  protected function countTrackedItems() {
    /** @var \Drupal\search_api\IndexInterface $index */
    $index = Index::load($this->indexId);
    return $index->getTrackerInstance()->getTotalItemsCount();
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc