annotate core/modules/views/src/Tests/ViewTestBase.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\views\Tests;
Chris@0 4
Chris@0 5 @trigger_error('\Drupal\views\Tests\ViewTestBase is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Instead, use \Drupal\Tests\views\Functional\ViewTestBase', E_USER_DEPRECATED);
Chris@0 6
Chris@18 7 use Drupal\Core\Database\Database;
Chris@0 8 use Drupal\Core\Database\Query\SelectInterface;
Chris@0 9 use Drupal\simpletest\WebTestBase;
Chris@0 10 use Drupal\views\ViewExecutable;
Chris@0 11
Chris@0 12 /**
Chris@0 13 * Defines a base class for Views testing in the full web test environment.
Chris@0 14 *
Chris@0 15 * Use this base test class if you need to emulate a full Drupal installation.
Chris@0 16 * When possible, ViewsKernelTestBase should be used instead. Both base classes
Chris@0 17 * include the same methods.
Chris@0 18 *
Chris@0 19 * @deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0.
Chris@0 20 * Use \Drupal\Tests\views\Functional\ViewTestBase.
Chris@0 21 *
Chris@0 22 * @see \Drupal\Tests\views\Kernel\ViewsKernelTestBase
Chris@0 23 * @see \Drupal\simpletest\WebTestBase
Chris@0 24 */
Chris@0 25 abstract class ViewTestBase extends WebTestBase {
Chris@0 26
Chris@0 27 use ViewResultAssertionTrait;
Chris@0 28
Chris@0 29 /**
Chris@0 30 * Modules to enable.
Chris@0 31 *
Chris@0 32 * @var array
Chris@0 33 */
Chris@0 34 public static $modules = ['views', 'views_test_config'];
Chris@0 35
Chris@0 36 protected function setUp($import_test_views = TRUE) {
Chris@0 37 parent::setUp();
Chris@0 38 if ($import_test_views) {
Chris@0 39 ViewTestData::createTestViews(get_class($this), ['views_test_config']);
Chris@0 40 }
Chris@0 41 }
Chris@0 42
Chris@0 43 /**
Chris@0 44 * Sets up the views_test_data.module.
Chris@0 45 *
Chris@0 46 * Because the schema of views_test_data.module is dependent on the test
Chris@0 47 * using it, it cannot be enabled normally.
Chris@0 48 */
Chris@0 49 protected function enableViewsTestModule() {
Chris@0 50 // Define the schema and views data variable before enabling the test module.
Chris@0 51 \Drupal::state()->set('views_test_data_schema', $this->schemaDefinition());
Chris@0 52 \Drupal::state()->set('views_test_data_views_data', $this->viewsData());
Chris@0 53
Chris@0 54 \Drupal::service('module_installer')->install(['views_test_data']);
Chris@0 55 $this->resetAll();
Chris@0 56 $this->rebuildContainer();
Chris@0 57 $this->container->get('module_handler')->reload();
Chris@0 58
Chris@0 59 // Load the test dataset.
Chris@0 60 $data_set = $this->dataSet();
Chris@18 61 $query = Database::getConnection()->insert('views_test_data')
Chris@0 62 ->fields(array_keys($data_set[0]));
Chris@0 63 foreach ($data_set as $record) {
Chris@0 64 $query->values($record);
Chris@0 65 }
Chris@0 66 $query->execute();
Chris@0 67 }
Chris@0 68
Chris@0 69 /**
Chris@0 70 * Orders a nested array containing a result set based on a given column.
Chris@0 71 *
Chris@0 72 * @param array $result_set
Chris@0 73 * An array of rows from a result set, with each row as an associative
Chris@0 74 * array keyed by column name.
Chris@0 75 * @param string $column
Chris@0 76 * The column name by which to sort the result set.
Chris@0 77 * @param bool $reverse
Chris@0 78 * (optional) Boolean indicating whether to sort the result set in reverse
Chris@0 79 * order. Defaults to FALSE.
Chris@0 80 *
Chris@0 81 * @return array
Chris@0 82 * The sorted result set.
Chris@0 83 */
Chris@0 84 protected function orderResultSet($result_set, $column, $reverse = FALSE) {
Chris@0 85 $order = $reverse ? -1 : 1;
Chris@0 86 usort($result_set, function ($a, $b) use ($column, $order) {
Chris@0 87 if ($a[$column] == $b[$column]) {
Chris@0 88 return 0;
Chris@0 89 }
Chris@0 90 return $order * (($a[$column] < $b[$column]) ? -1 : 1);
Chris@0 91 });
Chris@0 92 return $result_set;
Chris@0 93 }
Chris@0 94
Chris@0 95 /**
Chris@0 96 * Asserts the existence of a button with a certain ID and label.
Chris@0 97 *
Chris@0 98 * @param string $id
Chris@0 99 * The HTML ID of the button
Chris@0 100 * @param string $expected_label
Chris@0 101 * The expected label for the button.
Chris@0 102 * @param string $message
Chris@0 103 * (optional) A custom message to display with the assertion. If no custom
Chris@0 104 * message is provided, the message will indicate the button label.
Chris@0 105 *
Chris@0 106 * @return bool
Chris@0 107 * TRUE if the assertion was successful, or FALSE on failure.
Chris@0 108 */
Chris@0 109 protected function helperButtonHasLabel($id, $expected_label, $message = 'Label has the expected value: %label.') {
Chris@0 110 return $this->assertFieldById($id, $expected_label, t($message, ['%label' => $expected_label]));
Chris@0 111 }
Chris@0 112
Chris@0 113 /**
Chris@0 114 * Executes a view with debugging.
Chris@0 115 *
Chris@0 116 * @param \Drupal\views\ViewExecutable $view
Chris@0 117 * The view object.
Chris@0 118 * @param array $args
Chris@0 119 * (optional) An array of the view arguments to use for the view.
Chris@0 120 */
Chris@0 121 protected function executeView(ViewExecutable $view, $args = []) {
Chris@0 122 // A view does not really work outside of a request scope, due to many
Chris@0 123 // dependencies like the current user.
Chris@0 124 $view->setDisplay();
Chris@0 125 $view->preExecute($args);
Chris@0 126 $view->execute();
Chris@0 127 $verbose_message = '<pre>Executed view: ' . ((string) $view->build_info['query']) . '</pre>';
Chris@0 128 if ($view->build_info['query'] instanceof SelectInterface) {
Chris@0 129 $verbose_message .= '<pre>Arguments: ' . print_r($view->build_info['query']->getArguments(), TRUE) . '</pre>';
Chris@0 130 }
Chris@0 131 $this->verbose($verbose_message);
Chris@0 132 }
Chris@0 133
Chris@0 134 /**
Chris@0 135 * Returns the schema definition.
Chris@0 136 *
Chris@0 137 * @internal
Chris@0 138 */
Chris@0 139 protected function schemaDefinition() {
Chris@0 140 return ViewTestData::schemaDefinition();
Chris@0 141 }
Chris@0 142
Chris@0 143 /**
Chris@0 144 * Returns the views data definition.
Chris@0 145 */
Chris@0 146 protected function viewsData() {
Chris@0 147 return ViewTestData::viewsData();
Chris@0 148 }
Chris@0 149
Chris@0 150 /**
Chris@0 151 * Returns a very simple test dataset.
Chris@0 152 */
Chris@0 153 protected function dataSet() {
Chris@0 154 return ViewTestData::dataSet();
Chris@0 155 }
Chris@0 156
Chris@0 157 }