annotate core/modules/views/src/Tests/ViewTestBase.php @ 0:4c8ae668cc8c

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