From 668db719eb6938d828cc6f066bedfacf620182d6 Mon Sep 17 00:00:00 2001 From: David Rothstein Date: Mon, 30 Mar 2015 23:28:55 -0400 Subject: Issue #2364069 by damiankloip: Search specific tags are not available and hook_query_TAG_alter hooks are not invoked --- modules/search/search.extender.inc | 14 ++++++++-- modules/search/search.test | 41 ++++++++++++++++++++++++++++ modules/search/tests/search_node_tags.info | 6 ++++ modules/search/tests/search_node_tags.module | 23 ++++++++++++++++ 4 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 modules/search/tests/search_node_tags.info create mode 100644 modules/search/tests/search_node_tags.module (limited to 'modules/search') diff --git a/modules/search/search.extender.inc b/modules/search/search.extender.inc index 67094666e..72cea6472 100644 --- a/modules/search/search.extender.inc +++ b/modules/search/search.extender.inc @@ -149,6 +149,17 @@ class SearchQuery extends SelectQueryExtender { $this->searchExpression = $expression; $this->type = $module; + // Add a search_* tag. This needs to be added before any preExecute methods + // for decorated queries are called, as $this->prepared will be set to TRUE + // and tags added in the execute method will never get used. For example, + // if $query is extended by 'SearchQuery' then 'PagerDefault', the + // search-specific tag will be added too late (when preExecute() has + // already been called from the PagerDefault extender), and as a + // consequence will not be available to hook_query_alter() implementations, + // nor will the correct hook_query_TAG_alter() implementations get invoked. + // See node_search_execute(). + $this->addTag('search_' . $module); + return $this; } @@ -494,9 +505,8 @@ class SearchQuery extends SelectQueryExtender { $this->orderBy('calculated_score', 'DESC'); } - // Add tag and useful metadata. + // Add useful metadata. $this - ->addTag('search_' . $this->type) ->addMetaData('normalize', $this->normalize) ->fields('i', array('type', 'sid')); diff --git a/modules/search/search.test b/modules/search/search.test index 19f4e5510..5f16db3f8 100644 --- a/modules/search/search.test +++ b/modules/search/search.test @@ -2048,6 +2048,47 @@ class SearchNodeAccessTest extends DrupalWebTestCase { } } +/** + * Tests node search with query tags. + */ +class SearchNodeTagTest extends DrupalWebTestCase { + public $test_user; + + public static function getInfo() { + return array( + 'name' => 'Node search query tags', + 'description' => 'Tests Node search tags functionality.', + 'group' => 'Search', + ); + } + + function setUp() { + parent::setUp('search', 'search_node_tags'); + node_access_rebuild(); + + // Create a test user and log in. + $this->test_user = $this->drupalCreateUser(array('search content')); + $this->drupalLogin($this->test_user); + } + + /** + * Tests that the correct tags are available and hooks invoked. + */ + function testNodeSearchQueryTags() { + $this->drupalCreateNode(array('body' => array(LANGUAGE_NONE => array(array('value' => 'testing testing testing.'))))); + + // Update the search index. + module_invoke_all('update_index'); + search_update_totals(); + + $edit = array('keys' => 'testing'); + $this->drupalPost('search/node', $edit, t('Search')); + + $this->assertTrue(variable_get('search_node_tags_test_query_tag', FALSE), 'hook_query_alter() was invoked and the query contained the "search_node" tag.'); + $this->assertTrue(variable_get('search_node_tags_test_query_tag_hook', FALSE), 'hook_query_search_node_alter() was invoked.'); + } +} + /** * Tests searching with locale values set. */ diff --git a/modules/search/tests/search_node_tags.info b/modules/search/tests/search_node_tags.info new file mode 100644 index 000000000..dfa7d5356 --- /dev/null +++ b/modules/search/tests/search_node_tags.info @@ -0,0 +1,6 @@ +name = "Test search node tags" +description = "Support module for Node search tags testing." +package = Testing +version = VERSION +core = 7.x +hidden = TRUE diff --git a/modules/search/tests/search_node_tags.module b/modules/search/tests/search_node_tags.module new file mode 100644 index 000000000..b66dd9eaf --- /dev/null +++ b/modules/search/tests/search_node_tags.module @@ -0,0 +1,23 @@ +hasTag('search_node')) { + variable_set('search_node_tags_test_query_tag', TRUE); + } +} + +/** + * Implements hook_query_TAG_alter(). + */ +function search_node_tags_query_search_node_alter(QueryAlterableInterface $query) { + variable_set('search_node_tags_test_query_tag_hook', TRUE); +} -- cgit v1.2.3