Version 1
[yaffs-website] / web / core / modules / system / src / Tests / Database / SelectTableSortDefaultTest.php
diff --git a/web/core/modules/system/src/Tests/Database/SelectTableSortDefaultTest.php b/web/core/modules/system/src/Tests/Database/SelectTableSortDefaultTest.php
new file mode 100644 (file)
index 0000000..97a676b
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+
+namespace Drupal\system\Tests\Database;
+
+/**
+ * Tests the tablesort query extender.
+ *
+ * @group Database
+ */
+class SelectTableSortDefaultTest extends DatabaseWebTestBase {
+
+  /**
+   * Confirms that a tablesort query returns the correct results.
+   *
+   * Note that we have to make an HTTP request to a test page handler
+   * because the pager depends on GET parameters.
+   */
+  public function testTableSortQuery() {
+    $sorts = [
+      ['field' => t('Task ID'), 'sort' => 'desc', 'first' => 'perform at superbowl', 'last' => 'eat'],
+      ['field' => t('Task ID'), 'sort' => 'asc', 'first' => 'eat', 'last' => 'perform at superbowl'],
+      ['field' => t('Task'), 'sort' => 'asc', 'first' => 'code', 'last' => 'sleep'],
+      ['field' => t('Task'), 'sort' => 'desc', 'first' => 'sleep', 'last' => 'code'],
+      // more elements here
+
+    ];
+
+    foreach ($sorts as $sort) {
+      $this->drupalGet('database_test/tablesort/', ['query' => ['order' => $sort['field'], 'sort' => $sort['sort']]]);
+      $data = json_decode($this->getRawContent());
+
+      $first = array_shift($data->tasks);
+      $last = array_pop($data->tasks);
+
+      $this->assertEqual($first->task, $sort['first'], 'Items appear in the correct order.');
+      $this->assertEqual($last->task, $sort['last'], 'Items appear in the correct order.');
+    }
+  }
+
+  /**
+   * Confirms precedence of tablesorts headers.
+   *
+   * If a tablesort's orderByHeader is called before another orderBy, then its
+   * header happens first.
+   */
+  public function testTableSortQueryFirst() {
+    $sorts = [
+      ['field' => t('Task ID'), 'sort' => 'desc', 'first' => 'perform at superbowl', 'last' => 'eat'],
+      ['field' => t('Task ID'), 'sort' => 'asc', 'first' => 'eat', 'last' => 'perform at superbowl'],
+      ['field' => t('Task'), 'sort' => 'asc', 'first' => 'code', 'last' => 'sleep'],
+      ['field' => t('Task'), 'sort' => 'desc', 'first' => 'sleep', 'last' => 'code'],
+      // more elements here
+
+    ];
+
+    foreach ($sorts as $sort) {
+      $this->drupalGet('database_test/tablesort_first/', ['query' => ['order' => $sort['field'], 'sort' => $sort['sort']]]);
+      $data = json_decode($this->getRawContent());
+
+      $first = array_shift($data->tasks);
+      $last = array_pop($data->tasks);
+
+      $this->assertEqual($first->task, $sort['first'], format_string('Items appear in the correct order sorting by @field @sort.', ['@field' => $sort['field'], '@sort' => $sort['sort']]));
+      $this->assertEqual($last->task, $sort['last'], format_string('Items appear in the correct order sorting by @field @sort.', ['@field' => $sort['field'], '@sort' => $sort['sort']]));
+    }
+  }
+
+  /**
+   * Confirms that tableselect is rendered without error.
+   *
+   * Specifically that no sort is set in a tableselect, and that header links
+   * are correct.
+   */
+  public function testTableSortDefaultSort() {
+    $this->drupalGet('database_test/tablesort_default_sort');
+
+    // Verify that the table was displayed. Just the header is checked for
+    // because if there were any fatal errors or exceptions in displaying the
+    // sorted table, it would not print the table.
+    $this->assertText(t('Username'));
+
+    // Verify that the header links are built properly.
+    $this->assertLinkByHref('database_test/tablesort_default_sort');
+    $this->assertPattern('/\<a.*title\=\"' . t('sort by Username') . '\".*\>/');
+  }
+
+}