search_api-8.x-1.15/tests/src/Unit/Processor/StopwordsTest.php

tests/src/Unit/Processor/StopwordsTest.php
<?php

namespace Drupal\Tests\search_api\Unit\Processor;

use Drupal\search_api\IndexInterface;
use Drupal\search_api\Plugin\search_api\processor\Stopwords;
use Drupal\Tests\UnitTestCase;

/**
 * Tests the "Stopwords" processor.
 *
 * @group search_api
 *
 * @see \Drupal\search_api\Plugin\search_api\processor\Stopwords
 */
class StopwordsTest extends UnitTestCase {

  use ProcessorTestTrait, TestItemsTrait;

  /**
   * Creates a new processor object for use in the tests.
   */
  protected function setUp() {
    parent::setUp();
    $this->setUpMockContainer();
    $this->processor = new Stopwords([], 'stopwords', []);;
  }

  /**
   * Tests the process() method of the Stopwords processor.
   *
   * @param string $passed_value
   *   The string that should be passed to process().
   * @param string $expected_value
   *   The expected altered string.
   * @param string[] $stopwords
   *   The stopwords with which to configure the test processor.
   *
   * @dataProvider processDataProvider
   */
  public function testProcess($passed_value, $expected_value, array $stopwords) {
    $this->processor->setConfiguration(['stopwords' => $stopwords]);
    $this->invokeMethod('process', [&$passed_value]);
    $this->assertEquals($expected_value, $passed_value);
  }

  /**
   * Data provider for testStopwords().
   *
   * Processor checks for exact case, and tokenized content.
   */
  public function processDataProvider() {
    return [
      [
        'or',
        '',
        ['or'],
      ],
      [
        'orb',
        'orb',
        ['or'],
      ],
      [
        'for',
        'for',
        ['or'],
      ],
      [
        'ordor',
        'ordor',
        ['or'],
      ],
      [
        'ÄÖÜÀÁ<>»«û',
        'ÄÖÜÀÁ<>»«û',
        ['stopword1', 'ÄÖÜÀÁ<>»«', 'stopword3'],
      ],
      [
        'ÄÖÜÀÁ',
        '',
        ['stopword1', 'ÄÖÜÀÁ', 'stopword3'],
      ],
      [
        'ÄÖÜÀÁ stopword1',
        'ÄÖÜÀÁ stopword1',
        ['stopword1', 'ÄÖÜÀÁ', 'stopword3'],
      ],
    ];
  }

  /**
   * Tests the processor's preprocessSearchQuery() method.
   */
  public function testPreprocessSearchQuery() {
    $index = $this->createMock(IndexInterface::class);
    $index->expects($this->any())
      ->method('status')
      ->will($this->returnValue(TRUE));
    /** @var \Drupal\search_api\IndexInterface $index */

    $this->processor->setIndex($index);
    $query = \Drupal::getContainer()
      ->get('search_api.query_helper')
      ->createQuery($index);
    $keys = ['#conjunction' => 'AND', 'foo', 'bar', 'bar foo'];
    $query->keys($keys);

    $configuration = ['stopwords' => ['foobar', 'bar', 'barfoo']];
    $this->processor->setConfiguration($configuration);
    $this->processor->preprocessSearchQuery($query);
    unset($keys[1]);
    $this->assertEquals($keys, $query->getKeys());

    $this->assertEquals(['bar'], $query->getResults()->getIgnoredSearchKeys());
  }

}

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

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