summaryrefslogtreecommitdiff
path: root/kolab.org/www/drupal-7.26/modules/simpletest/tests/database_test.module
diff options
context:
space:
mode:
Diffstat (limited to 'kolab.org/www/drupal-7.26/modules/simpletest/tests/database_test.module')
-rw-r--r--kolab.org/www/drupal-7.26/modules/simpletest/tests/database_test.module241
1 files changed, 241 insertions, 0 deletions
diff --git a/kolab.org/www/drupal-7.26/modules/simpletest/tests/database_test.module b/kolab.org/www/drupal-7.26/modules/simpletest/tests/database_test.module
new file mode 100644
index 0000000..6fac319
--- /dev/null
+++ b/kolab.org/www/drupal-7.26/modules/simpletest/tests/database_test.module
@@ -0,0 +1,241 @@
+<?php
+
+/**
+ * Implements hook_query_alter().
+ */
+function database_test_query_alter(QueryAlterableInterface $query) {
+
+ if ($query->hasTag('database_test_alter_add_range')) {
+ $query->range(0, 2);
+ }
+
+ if ($query->hasTag('database_test_alter_add_join')) {
+ $people_alias = $query->join('test', 'people', "test_task.pid = %alias.id");
+ $name_field = $query->addField($people_alias, 'name', 'name');
+ $query->condition($people_alias . '.id', 2);
+ }
+
+ if ($query->hasTag('database_test_alter_change_conditional')) {
+ $conditions =& $query->conditions();
+ $conditions[0]['value'] = 2;
+ }
+
+ if ($query->hasTag('database_test_alter_change_fields')) {
+ $fields =& $query->getFields();
+ unset($fields['age']);
+ }
+
+ if ($query->hasTag('database_test_alter_change_expressions')) {
+ $expressions =& $query->getExpressions();
+ $expressions['double_age']['expression'] = 'age*3';
+ }
+}
+
+
+/**
+ * Implements hook_query_TAG_alter().
+ *
+ * Called by DatabaseTestCase::testAlterRemoveRange.
+ */
+function database_test_query_database_test_alter_remove_range_alter(QueryAlterableInterface $query) {
+ $query->range();
+}
+
+/**
+ * Implements hook_menu().
+ */
+function database_test_menu() {
+ $items['database_test/db_query_temporary'] = array(
+ 'access callback' => TRUE,
+ 'page callback' => 'database_test_db_query_temporary',
+ );
+ $items['database_test/pager_query_even'] = array(
+ 'access callback' => TRUE,
+ 'page callback' => 'database_test_even_pager_query',
+ );
+ $items['database_test/pager_query_odd'] = array(
+ 'access callback' => TRUE,
+ 'page callback' => 'database_test_odd_pager_query',
+ );
+ $items['database_test/tablesort'] = array(
+ 'access callback' => TRUE,
+ 'page callback' => 'database_test_tablesort',
+ );
+ $items['database_test/tablesort_first'] = array(
+ 'access callback' => TRUE,
+ 'page callback' => 'database_test_tablesort_first',
+ );
+ $items['database_test/tablesort_default_sort'] = array(
+ 'access callback' => TRUE,
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('database_test_theme_tablesort'),
+ );
+ return $items;
+}
+
+/**
+ * Run a db_query_temporary and output the table name and its number of rows.
+ *
+ * We need to test that the table created is temporary, so we run it here, in a
+ * separate menu callback request; After this request is done, the temporary
+ * table should automatically dropped.
+ */
+function database_test_db_query_temporary() {
+ $table_name = db_query_temporary('SELECT status FROM {system}', array());
+ drupal_json_output(array(
+ 'table_name' => $table_name,
+ 'row_count' => db_select($table_name)->countQuery()->execute()->fetchField(),
+ ));
+ exit;
+}
+
+/**
+ * Run a pager query and return the results.
+ *
+ * This function does care about the page GET parameter, as set by the
+ * simpletest HTTP call.
+ */
+function database_test_even_pager_query($limit) {
+
+ $query = db_select('test', 't');
+ $query
+ ->fields('t', array('name'))
+ ->orderBy('age');
+
+ // This should result in 2 pages of results.
+ $query = $query->extend('PagerDefault')->limit($limit);
+
+ $names = $query->execute()->fetchCol();
+
+ drupal_json_output(array(
+ 'names' => $names,
+ ));
+ exit;
+}
+
+/**
+ * Run a pager query and return the results.
+ *
+ * This function does care about the page GET parameter, as set by the
+ * simpletest HTTP call.
+ */
+function database_test_odd_pager_query($limit) {
+
+ $query = db_select('test_task', 't');
+ $query
+ ->fields('t', array('task'))
+ ->orderBy('pid');
+
+ // This should result in 4 pages of results.
+ $query = $query->extend('PagerDefault')->limit($limit);
+
+ $names = $query->execute()->fetchCol();
+
+ drupal_json_output(array(
+ 'names' => $names,
+ ));
+ exit;
+}
+
+/**
+ * Run a tablesort query and return the results.
+ *
+ * This function does care about the page GET parameter, as set by the
+ * simpletest HTTP call.
+ */
+function database_test_tablesort() {
+ $header = array(
+ 'tid' => array('data' => t('Task ID'), 'field' => 'tid', 'sort' => 'desc'),
+ 'pid' => array('data' => t('Person ID'), 'field' => 'pid'),
+ 'task' => array('data' => t('Task'), 'field' => 'task'),
+ 'priority' => array('data' => t('Priority'), 'field' => 'priority', ),
+ );
+
+ $query = db_select('test_task', 't');
+ $query
+ ->fields('t', array('tid', 'pid', 'task', 'priority'));
+
+ $query = $query->extend('TableSort')->orderByHeader($header);
+
+ // We need all the results at once to check the sort.
+ $tasks = $query->execute()->fetchAll();
+
+ drupal_json_output(array(
+ 'tasks' => $tasks,
+ ));
+ exit;
+}
+
+/**
+ * Run a tablesort query with a second order_by after and return the results.
+ *
+ * This function does care about the page GET parameter, as set by the
+ * simpletest HTTP call.
+ */
+function database_test_tablesort_first() {
+ $header = array(
+ 'tid' => array('data' => t('Task ID'), 'field' => 'tid', 'sort' => 'desc'),
+ 'pid' => array('data' => t('Person ID'), 'field' => 'pid'),
+ 'task' => array('data' => t('Task'), 'field' => 'task'),
+ 'priority' => array('data' => t('Priority'), 'field' => 'priority', ),
+ );
+
+ $query = db_select('test_task', 't');
+ $query
+ ->fields('t', array('tid', 'pid', 'task', 'priority'));
+
+ $query = $query->extend('TableSort')->orderByHeader($header)->orderBy('priority');
+
+ // We need all the results at once to check the sort.
+ $tasks = $query->execute()->fetchAll();
+
+ drupal_json_output(array(
+ 'tasks' => $tasks,
+ ));
+ exit;
+}
+
+/**
+ * Output a form without setting a header sort.
+ */
+function database_test_theme_tablesort($form, &$form_state) {
+ $header = array(
+ 'username' => array('data' => t('Username'), 'field' => 'u.name'),
+ 'status' => array('data' => t('Status'), 'field' => 'u.status'),
+ );
+
+ $query = db_select('users', 'u');
+ $query->condition('u.uid', 0, '<>');
+ user_build_filter_query($query);
+
+ $count_query = clone $query;
+ $count_query->addExpression('COUNT(u.uid)');
+
+ $query = $query->extend('PagerDefault')->extend('TableSort');
+ $query
+ ->fields('u', array('uid', 'name', 'status', 'created', 'access'))
+ ->limit(50)
+ ->orderByHeader($header)
+ ->setCountQuery($count_query);
+ $result = $query->execute();
+
+ $options = array();
+
+ $status = array(t('blocked'), t('active'));
+ $accounts = array();
+ foreach ($result as $account) {
+ $options[$account->uid] = array(
+ 'username' => check_plain($account->name),
+ 'status' => $status[$account->status],
+ );
+ }
+
+ $form['accounts'] = array(
+ '#type' => 'tableselect',
+ '#header' => $header,
+ '#options' => $options,
+ '#empty' => t('No people available.'),
+ );
+
+ return $form;
+}