SearchTestBase.php

Same filename in this branch
  1. 8.9.x core/modules/search/tests/src/Functional/SearchTestBase.php

Namespace

Drupal\search\Tests

File

core/modules/search/src/Tests/SearchTestBase.php

View source
<?php

namespace Drupal\search\Tests;

@trigger_error(__NAMESPACE__ . '\\SearchTestBase is deprecated for removal before Drupal 9.0.0. Use \\Drupal\\Tests\\search\\Functional\\SearchTestBase instead. See https://www.drupal.org/node/2999939', E_USER_DEPRECATED);
use Drupal\simpletest\WebTestBase;
use Drupal\Component\Render\FormattableMarkup;

/**
 * Defines the common search test code.
 *
 * @deprecated in drupal:8.?.? and is removed from drupal:9.0.0.
 *   Use \Drupal\Tests\search\Functional\SearchTestBase instead.
 *
 * @see https://www.drupal.org/node/2999939
 */
abstract class SearchTestBase extends WebTestBase {
    
    /**
     * Modules to enable.
     *
     * @var array
     */
    public static $modules = [
        'node',
        'search',
        'dblog',
    ];
    protected function setUp() {
        parent::setUp();
        // Create Basic page and Article node types.
        if ($this->profile != 'standard') {
            $this->drupalCreateContentType([
                'type' => 'page',
                'name' => 'Basic page',
            ]);
            $this->drupalCreateContentType([
                'type' => 'article',
                'name' => 'Article',
            ]);
        }
    }
    
    /**
     * Simulates submission of a form using GET instead of POST.
     *
     * Forms that use the GET method cannot be submitted with
     * WebTestBase::drupalPostForm(), which explicitly uses POST to submit the
     * form. So this method finds the form, verifies that it has input fields and
     * a submit button matching the inputs to this method, and then calls
     * WebTestBase::drupalGet() to simulate the form submission to the 'action'
     * URL of the form (if set, or the current URL if not).
     *
     * See WebTestBase::drupalPostForm() for more detailed documentation of the
     * function parameters.
     *
     * @param string $path
     *   Location of the form to be submitted: either a Drupal path, absolute
     *   path, or NULL to use the current page.
     * @param array $edit
     *   Form field data to submit. Unlike drupalPostForm(), this does not support
     *   file uploads.
     * @param string $submit
     *   Value of the submit button to submit clicking. Unlike drupalPostForm(),
     *   this does not support AJAX.
     * @param string $form_html_id
     *   (optional) HTML ID of the form, to disambiguate.
     */
    protected function submitGetForm($path, $edit, $submit, $form_html_id = NULL) {
        if (isset($path)) {
            $this->drupalGet($path);
        }
        if ($this->parse()) {
            // Iterate over forms to find one that matches $edit and $submit.
            $edit_save = $edit;
            $xpath = '//form';
            if (!empty($form_html_id)) {
                $xpath .= "[@id='" . $form_html_id . "']";
            }
            $forms = $this->xpath($xpath);
            foreach ($forms as $form) {
                // Try to set the fields of this form as specified in $edit.
                $edit = $edit_save;
                $post = [];
                $upload = [];
                $submit_matches = $this->handleForm($post, $edit, $upload, $submit, $form);
                if (!$edit && $submit_matches) {
                    // Everything matched, so "submit" the form.
                    $action = isset($form['action']) ? $this->getAbsoluteUrl((string) $form['action']) : NULL;
                    $this->drupalGet($action, [
                        'query' => $post,
                    ]);
                    return;
                }
            }
            // We have not found a form which contained all fields of $edit and
            // the submit button.
            foreach ($edit as $name => $value) {
                $this->fail(new FormattableMarkup('Failed to set field @name to @value', [
                    '@name' => $name,
                    '@value' => $value,
                ]));
            }
            $this->assertTrue($submit_matches, new FormattableMarkup('Found the @submit button', [
                '@submit' => $submit,
            ]));
            $this->fail(new FormattableMarkup('Found the requested form fields at @path', [
                '@path' => $path,
            ]));
        }
    }

}

Classes

Title Deprecated Summary
SearchTestBase

in drupal:8.?.? and is removed from drupal:9.0.0. Use \Drupal\Tests\search\Functional\SearchTestBase instead.

Defines the common search test code.

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