lunr-8.x-1.0/tests/src/FunctionalJavascript/LunrSearchTest.php

tests/src/FunctionalJavascript/LunrSearchTest.php
<?php

namespace Drupal\Tests\lunr\FunctionalJavascript;

use Drupal\Core\Url;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\lunr\Entity\LunrSearch;
use Drupal\node\Entity\Node;

/**
 * Tests basic Lunr search functionality.
 *
 * @group lunr
 */
class LunrSearchTest extends WebDriverTestBase {

  /**
   * {@inheritdoc}
   */
  protected $strictConfigSchema = FALSE;

  /**
   * {@inheritdoc}
   */
  protected static $modules = ['node', 'lunr', 'content_translation'];

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    $user = $this->drupalCreateUser(['administer lunr search']);
    $this->drupalLogin($user);
    $this->createContentType(['type' => 'article']);
    $this->createContentType(['type' => 'page']);

    ConfigurableLanguage::createFromLangcode('fr')->save();
    $this->config('language.negotiation')->set('url.prefixes', [
      'en' => '',
      'fr' => 'french',
    ])->save();

    /** @var \Drupal\content_translation\ContentTranslationManagerInterface $content_translation_manager */
    $content_translation_manager = $this->container->get('content_translation.manager');
    $content_translation_manager->setEnabled('node', 'article', TRUE);
    drupal_flush_all_caches();

    for ($i = 0; $i < 50; ++$i) {
      $node = Node::create([
        'type' => 'article',
      ]);
      $node->title = 'Cat ' . $this->randomString();
      $node->body->generateSampleItems();
      $node->setPublished();
      $node->save();
      $node->addTranslation('fr', [
        'title' => 'Chat ' . $this->randomString(),
      ])->save();
    }
    for ($i = 0; $i < 50; ++$i) {
      $node = Node::create([
        'type' => 'article',
      ]);
      $node->title = 'Dog ' . $this->randomString();
      $node->body->generateSampleItems();
      $node->setPublished();
      $node->save();
      $node->addTranslation('fr', [
        'title' => 'Chien ' . $this->randomString(),
      ])->save();
    }
  }

  /**
   * Tests really basic Lunr search functionality.
   */
  public function testLunrSearch() {
    $this->getSession()->maximizeWindow();
    $assert_session = $this->assertSession();
    $lunr_search = LunrSearch::load('default');
    $this->drupalGet($lunr_search->toUrl('index'));
    $this->click('.js-lunr-search-index-button');
    $assert_session->waitForElement('css', '.lunr-search-indexing-complete');
    $this->drupalGet(Url::fromRoute('lunr_search.default'));
    $assert_session->pageTextContains('Search');
    $assert_session->pageTextContains('Keywords');
    $input = $assert_session->elementExists('css', '.js-lunr-search-input');
    $submit = $assert_session->elementExists('css', '.js-lunr-search-submit');
    $submit->click();
    $assert_session->waitForElement('css', 'form.lunr-ready');
    $assert_session->pageTextContains('Page 1 of 100 results');
    $assert_session->elementsCount('css', '.lunr-search-result-row', 10);
    $assert_session->pageTextMatches('/(Cat|Dog)/');
    $assert_session->pageTextNotMatches('/(Chat|Chien)/');
    $input->setValue('Dog');
    $submit->click();
    $assert_session->pageTextContains('Dog');
    $assert_session->pageTextNotContains('Chien');
    $assert_session->pageTextContains('Page 1 of 50 results');
    $assert_session->elementsCount('css', '.lunr-search-result-row', 10);
    $this->getSession()->executeScript('jQuery("a[data-page=\'1\']").click()');
    $assert_session->waitForElement('css', 'a[data-page="1"].active');
    $assert_session->pageTextContains('Page 2 of 50 results');
    $assert_session->elementsCount('css', '.lunr-search-result-row', 10);

    $this->drupalGet(Url::fromRoute('lunr_search.default', [], ['language' => $this->container->get('language_manager')->getLanguage('fr')]));
    $submit = $assert_session->elementExists('css', '.js-lunr-search-submit');
    $submit->click();
    $assert_session->waitForElement('css', 'form.lunr-ready');
    $assert_session->pageTextContains('Page 1 of 100 results');
    $assert_session->elementsCount('css', '.lunr-search-result-row', 10);
    $assert_session->pageTextNotMatches('/(Cat|Dog)/');
    $assert_session->pageTextMatches('/(Chat|Chien)/');
    $input->setValue('Chien');
    $submit->click();
    $assert_session->pageTextNotContains('Dog');
    $assert_session->pageTextContains('Chien');
    $assert_session->pageTextContains('Page 1 of 50 results');
    $assert_session->elementsCount('css', '.lunr-search-result-row', 10);
  }

  /**
   * Tests the pager logic.
   *
   * @dataProvider providerPagerData
   */
  public function testLunrSearchPager($results_per_page, $links) {
    $this->getSession()->maximizeWindow();
    $assert_session = $this->assertSession();
    $lunr_search = LunrSearch::load('default');
    $lunr_search->setResultsPerPage($results_per_page);
    $lunr_search->save();

    $this->drupalGet($lunr_search->toUrl('index'));
    $this->click('.js-lunr-search-index-button');
    $assert_session->waitForElement('css', '.lunr-search-indexing-complete');

    $this->drupalGet(Url::fromRoute('lunr_search.default'));
    $assert_session->waitForElement('css', 'form.lunr-ready');
    $submit = $assert_session->elementExists('css', '.js-lunr-search-submit');
    $submit->click();
    $assert_session->waitForElement('css', 'form.lunr-ready');

    $assert_session->elementsCount('css', '.lunr-search-pager a', $links);
  }

  /**
   * Data provider for testLunrSearchPager().
   */
  public function providerPagerData() {
    return [
      // [$results_per_page, $links]
      // Smaller than page limit, pager links visible.
      [99, 4],
      // Exactly page limit, single page.
      [100, 0],
      // Bigger than page limit, single page.
      [101, 0],
    ];
  }

  /**
   * Tests field based search.
   */
  public function testLunrFieldSearch() {
    $node = Node::create([
      'type' => 'page',
    ]);
    $node->title = 'Bear One';
    $node->body->generateSampleItems();
    $node->setPublished();
    $node->save();

    $node = Node::create([
      'type' => 'page',
    ]);
    $node->title = 'Bear Two';
    $node->body->generateSampleItems();
    $node->setPublished();
    $node->save();

    $this->container->get('module_installer')->install([
      'lunr_facet_example',
    ], TRUE);

    $this->getSession()->maximizeWindow();
    $assert_session = $this->assertSession();
    $lunr_search = LunrSearch::load('facet_example');

    $this->drupalGet($lunr_search->toUrl('index'));
    $this->click('.js-lunr-search-index-button');
    $assert_session->waitForElement('css', '.lunr-search-indexing-complete');

    $this->drupalGet(Url::fromRoute('lunr_search.facet_example'));
    $assert_session->waitForElement('css', 'form.lunr-ready');
    $select = $assert_session->elementExists('css', '[data-lunr-search-field="type"]');
    $select->setValue('article');
    $submit = $assert_session->elementExists('css', '.js-lunr-search-submit');
    $submit->click();
    $assert_session->waitForElement('css', 'form.lunr-ready');

    $assert_session->pageTextMatches('/(Cat|Dog)/');
    $assert_session->pageTextNotContains('Bear');

    $select->setValue('page');
    $submit->click();
    $assert_session->waitForElement('css', 'form.lunr-ready');

    $assert_session->pageTextContains('Bear');
    $assert_session->pageTextNotMatches('/(Cat|Dog)/');

    $input = $assert_session->elementExists('css', '.js-lunr-search-input');
    $input->setValue('Two');
    $submit->click();
    $assert_session->waitForElement('css', 'form.lunr-ready');

    $assert_session->pageTextContains('Bear Two');
    $assert_session->pageTextNotMatches('/(Cat|Dog)/');
    $assert_session->pageTextNotContains('Bear One');
  }

}

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

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