summaryrefslogtreecommitdiff
path: root/modules/simpletest
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2010-06-24 17:24:40 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2010-06-24 17:24:40 +0000
commit2d9fd20acc7c9e668c0f04e1486771227205a41e (patch)
tree99f396458cd1749f9d020ea83264a147afcef182 /modules/simpletest
parenta1f25d312f628bb09acf1c7c06566fc37776412b (diff)
downloadbrdo-2d9fd20acc7c9e668c0f04e1486771227205a41e.tar.gz
brdo-2d9fd20acc7c9e668c0f04e1486771227205a41e.tar.bz2
#834842 by Damien Tournoud, chx: Fixed oversight in field query routing API, and added tests.
Diffstat (limited to 'modules/simpletest')
-rw-r--r--modules/simpletest/tests/entity_query.test54
1 files changed, 54 insertions, 0 deletions
diff --git a/modules/simpletest/tests/entity_query.test b/modules/simpletest/tests/entity_query.test
index aa1beef4f..b765d03d2 100644
--- a/modules/simpletest/tests/entity_query.test
+++ b/modules/simpletest/tests/entity_query.test
@@ -819,6 +819,60 @@ class EntityFieldQueryTestCase extends DrupalWebTestCase {
}
/**
+ * Tests the routing feature of EntityFieldQuery.
+ */
+ function testEntityFieldQueryRouting() {
+ // Entity-only query.
+ $query = new EntityFieldQuery();
+ $query->entityCondition('entity_type', 'test_entity_bundle_key');
+ $this->assertIdentical($query->queryCallback(), array($query, 'propertyQuery'), t('Entity-only queries are handled by the propertyQuery handler.'));
+
+ // Field-only query.
+ $query = new EntityFieldQuery();
+ $query->fieldCondition($this->fields[0], 'value', '3');
+ $this->assertIdentical($query->queryCallback(), 'field_sql_storage_field_storage_query', t('Pure field queries are handled by the Field storage handler.'));
+
+ // Mixed entity and field query.
+ $query = new EntityFieldQuery();
+ $query
+ ->entityCondition('entity_type', 'test_entity_bundle_key')
+ ->fieldCondition($this->fields[0], 'value', '3');
+ $this->assertIdentical($query->queryCallback(), 'field_sql_storage_field_storage_query', t('Mixed queries are handled by the Field storage handler.'));
+
+ // Overriding with $query->executeCallback.
+ $query = new EntityFieldQuery();
+ $query->entityCondition('entity_type', 'test_entity_bundle_key');
+ $query->executeCallback = 'field_test_dummy_field_storage_query';
+ $this->assertEntityFieldQuery($query, array(
+ array('user', 1),
+ ), t('executeCallback can override the query handler.'));
+
+ // Overriding with $query->executeCallback via hook_entity_query_alter().
+ $query = new EntityFieldQuery();
+ $query->entityCondition('entity_type', 'test_entity_bundle_key');
+ // Add a flag that will be caught by field_test_entity_query_alter().
+ $query->alterMyExecuteCallbackPlease = TRUE;
+ $this->assertEntityFieldQuery($query, array(
+ array('user', 1),
+ ), t('executeCallback can override the query handler when set in a hook_entity_query_alter().'));
+
+ // Mixed-storage queries.
+ $query = new EntityFieldQuery();
+ $query
+ ->fieldCondition($this->fields[0], 'value', '3')
+ ->fieldCondition($this->fields[1], 'shape', 'squ', 'STARTS_WITH');
+ // Alter the storage of the field.
+ $query->fields[1]['storage']['module'] = 'dummy_storage';
+ try {
+ $query->queryCallback();
+ }
+ catch (EntityFieldQueryException $exception) {
+ $pass = ($exception->getMessage() == t("Can't handle more than one field storage engine"));
+ }
+ $this->assertTrue($pass, t('Cannot query across field storage engines.'));
+ }
+
+ /**
* Fetches the results of an EntityFieldQuery and compares.
*
* @param $query