SearchExactTest.php

Same filename in other branches
  1. 9 core/modules/search/tests/src/Functional/SearchExactTest.php
  2. 8.9.x core/modules/search/tests/src/Functional/SearchExactTest.php
  3. 11.x core/modules/search/tests/src/Functional/SearchExactTest.php

Namespace

Drupal\Tests\search\Functional

File

core/modules/search/tests/src/Functional/SearchExactTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\search\Functional;

use Drupal\Tests\BrowserTestBase;

/**
 * Tests that searching for a phrase gets the correct page count.
 *
 * @group search
 */
class SearchExactTest extends BrowserTestBase {
    
    /**
     * {@inheritdoc}
     */
    protected static $modules = [
        'node',
        'search',
    ];
    
    /**
     * {@inheritdoc}
     */
    protected $defaultTheme = 'stark';
    
    /**
     * Tests that the correct number of pager links are found for both keywords and phrases.
     */
    public function testExactQuery() : void {
        $this->drupalCreateContentType([
            'type' => 'page',
            'name' => 'Basic page',
        ]);
        // Log in with sufficient privileges.
        $user = $this->drupalCreateUser([
            'create page content',
            'search content',
        ]);
        $this->drupalLogin($user);
        $settings = [
            'type' => 'page',
            'title' => 'Simple Node',
        ];
        // Create nodes with exact phrase.
        for ($i = 0; $i <= 17; $i++) {
            $settings['body'] = [
                [
                    'value' => 'love pizza',
                ],
            ];
            $this->drupalCreateNode($settings);
        }
        // Create nodes containing keywords.
        for ($i = 0; $i <= 17; $i++) {
            $settings['body'] = [
                [
                    'value' => 'love cheesy pizza',
                ],
            ];
            $this->drupalCreateNode($settings);
        }
        // Create another node and save it for later.
        $settings['body'] = [
            [
                'value' => 'Druplicon',
            ],
        ];
        $node = $this->drupalCreateNode($settings);
        // Update the search index.
        $this->container
            ->get('plugin.manager.search')
            ->createInstance('node_search')
            ->updateIndex();
        // Refresh variables after the treatment.
        $this->refreshVariables();
        // Test that the correct number of pager links are found for keyword search.
        $edit = [
            'keys' => 'love pizza',
        ];
        $this->drupalGet('search/node');
        $this->submitForm($edit, 'Search');
        $this->assertSession()
            ->linkByHrefExists('page=1', 0, '2nd page link is found for keyword search.');
        $this->assertSession()
            ->linkByHrefExists('page=2', 0, '3rd page link is found for keyword search.');
        $this->assertSession()
            ->linkByHrefExists('page=3', 0, '4th page link is found for keyword search.');
        $this->assertSession()
            ->linkByHrefNotExists('page=4', '5th page link is not found for keyword search.');
        // Test that the correct number of pager links are found for exact phrase search.
        $edit = [
            'keys' => '"love pizza"',
        ];
        $this->drupalGet('search/node');
        $this->submitForm($edit, 'Search');
        $this->assertSession()
            ->linkByHrefExists('page=1', 0, '2nd page link is found for exact phrase search.');
        $this->assertSession()
            ->linkByHrefNotExists('page=2', '3rd page link is not found for exact phrase search.');
        // Check that with post settings turned on the post information is displayed.
        $node_type_config = \Drupal::configFactory()->getEditable('node.type.page');
        $node_type_config->set('display_submitted', TRUE);
        $node_type_config->save();
        $edit = [
            'keys' => 'Druplicon',
        ];
        $this->drupalGet('search/node');
        $this->submitForm($edit, 'Search');
        $this->assertSession()
            ->pageTextContains($user->getAccountName());
        $this->assertSession()
            ->pageTextContains($this->container
            ->get('date.formatter')
            ->format($node->getChangedTime(), 'short'));
        // Check that with post settings turned off the user and changed date
        // information is not displayed.
        $node_type_config->set('display_submitted', FALSE);
        $node_type_config->save();
        $edit = [
            'keys' => 'Druplicon',
        ];
        $this->drupalGet('search/node');
        $this->submitForm($edit, 'Search');
        $this->assertSession()
            ->pageTextNotContains($user->getAccountName());
        $this->assertSession()
            ->pageTextNotContains($this->container
            ->get('date.formatter')
            ->format($node->getChangedTime(), 'short'));
    }

}

Classes

Title Deprecated Summary
SearchExactTest Tests that searching for a phrase gets the correct page count.

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