search_api-8.x-1.15/tests/src/Kernel/Processor/TypeBoostTest.php

tests/src/Kernel/Processor/TypeBoostTest.php
<?php

namespace Drupal\Tests\search_api\Kernel\Processor;

use Drupal\Core\Form\FormState;
use Drupal\node\NodeInterface;
use Drupal\node\Entity\Node;
use Drupal\node\Entity\NodeType;

/**
 * Tests the "Type-specific boosting" processor.
 *
 * @group search_api
 *
 * @coversDefaultClass \Drupal\search_api\Plugin\search_api\processor\TypeBoost
 */
class TypeBoostTest extends ProcessorTestBase {

  /**
   * The processor used for this test.
   *
   * @var \Drupal\search_api\Plugin\search_api\processor\TypeBoost
   */
  protected $processor;

  /**
   * {@inheritdoc}
   */
  public function setUp($processor = NULL) {
    parent::setUp('type_boost');

    // Create an article node type, if not already present.
    if (!NodeType::load('article')) {
      $article_node_type = NodeType::create([
        'type' => 'article',
        'name' => 'Article',
      ]);
      $article_node_type->save();
    }

    // Create a page node type, if not already present.
    if (!NodeType::load('page')) {
      $page_node_type = NodeType::create([
        'type' => 'page',
        'name' => 'Page',
      ]);
      $page_node_type->save();
    }

    // Setup a node index.
    $datasources = \Drupal::getContainer()
      ->get('search_api.plugin_helper')
      ->createDatasourcePlugins($this->index, ['entity:node']);
    $this->index->setDatasources($datasources);
    $this->index->save();
    $this->container
      ->get('search_api.index_task_manager')
      ->addItemsAll($this->index);
    $index_storage = $this->container
      ->get('entity_type.manager')
      ->getStorage('search_api_index');
    $index_storage->resetCache([$this->index->id()]);
    $this->index = $index_storage->load($this->index->id());
  }

  /**
   * Tests that the correct boost is set on items.
   *
   * @covers ::preprocessIndexItems
   */
  public function testEntityBundleBoost() {
    // Enable the processor indexing.
    $processor = $this->index->getProcessor('type_boost');
    $configuration = [
      'boosts' => [
        'entity:node' => [
          'datasource_boost' => '3.0',
          'bundle_boosts' => [
            'article' => '5.0',
          ],
        ],
      ],
    ];
    $processor->setConfiguration($configuration);
    $this->index->setProcessors(['type_boost' => $processor]);
    $this->index->save();

    // Create nodes for both node types.
    $nodes = [];
    foreach (['article', 'page', 'article'] as $node_type) {
      $node = Node::create([
        'status' => NodeInterface::PUBLISHED,
        'type' => $node_type,
        'title' => $this->randomString(),
      ]);
      $node->save();
      $nodes[$node->id()] = $node->getTypedData();
    }

    // Prepare and generate Search API items.
    $items = [];
    foreach ($nodes as $nid => $node) {
      $items[] = [
        'datasource' => 'entity:node',
        'item' => $node,
        'item_id' => $nid,
      ];
    }
    $items = $this->generateItems($items);

    // Set a boost on one of the items to check whether it gets overwritten or
    // (correctly) multiplied.
    $items['entity:node/3']->setBoost(2);

    // Preprocess items.
    $this->index->preprocessIndexItems($items);

    // Check boost value on article node.
    $boost_expected = 5;
    $boost_actual = $items['entity:node/1']->getBoost();
    $this->assertEquals($boost_expected, $boost_actual);

    // Check boost value on page node.
    $boost_expected = 3;
    $boost_actual = $items['entity:node/2']->getBoost();
    $this->assertEquals($boost_expected, $boost_actual);

    // Check boost value on article node with pre-existing boost.
    $boost_expected = 10;
    $boost_actual = $items['entity:node/3']->getBoost();
    $this->assertEquals($boost_expected, $boost_actual);
  }

  /**
   * Tests that default values for individual bundles are correct in the form.
   */
  public function testConfigFormBundleBoostDefaults() {
    $form = $this->processor->buildConfigurationForm([], new FormState());

    $this->assertEquals('', $form['boosts']['entity:node']['bundle_boosts']['article']['#default_value']);
    $this->assertEquals('', $form['boosts']['entity:node']['bundle_boosts']['page']['#default_value']);

    $configuration = [
      'boosts' => [
        'entity:node' => [
          'datasource_boost' => '3.0',
          'bundle_boosts' => [
            'article' => '0.0',
          ],
        ],
      ],
    ];
    $this->processor->setConfiguration($configuration);

    $form = $this->processor->buildConfigurationForm([], new FormState());

    $this->assertEquals('0.0', $form['boosts']['entity:node']['bundle_boosts']['article']['#default_value']);
    $this->assertEquals('', $form['boosts']['entity:node']['bundle_boosts']['page']['#default_value']);
  }

}

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

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