Test rankings of HTML tags.
function testHTMLRankings() {
$full_html_format = entity_create('filter_format', array(
'format' => 'full_html',
'name' => 'Full HTML',
));
$full_html_format
->save();
// Login with sufficient privileges.
$this
->drupalLogin($this
->drupalCreateUser(array(
'create page content',
)));
// Test HTML tags with different weights.
$sorted_tags = array(
'h1',
'h2',
'h3',
'h4',
'a',
'h5',
'h6',
'notag',
);
$shuffled_tags = $sorted_tags;
// Shuffle tags to ensure HTML tags are ranked properly.
shuffle($shuffled_tags);
$settings = array(
'type' => 'page',
'title' => 'Simple node',
);
foreach ($shuffled_tags as $tag) {
switch ($tag) {
case 'a':
$settings['body'] = array(
array(
'value' => l('Drupal Rocks', 'node'),
'format' => 'full_html',
),
);
break;
case 'notag':
$settings['body'] = array(
array(
'value' => 'Drupal Rocks',
),
);
break;
default:
$settings['body'] = array(
array(
'value' => "<{$tag}>Drupal Rocks</{$tag}>",
'format' => 'full_html',
),
);
break;
}
$nodes[$tag] = $this
->drupalCreateNode($settings);
}
// Update the search index.
module_invoke_all('update_index');
search_update_totals();
// Refresh variables after the treatment.
$this
->refreshVariables();
// Disable all other rankings.
$node_ranks = array(
'sticky',
'promote',
'recent',
'comments',
'views',
);
foreach ($node_ranks as $node_rank) {
variable_set('node_rank_' . $node_rank, 0);
}
$set = node_search_execute('rocks');
// Test the ranking of each tag.
foreach ($sorted_tags as $tag_rank => $tag) {
// Assert the results.
if ($tag == 'notag') {
$this
->assertEqual($set[$tag_rank]['node']->nid, $nodes[$tag]->nid, 'Search tag ranking for plain text order.');
}
else {
$this
->assertEqual($set[$tag_rank]['node']->nid, $nodes[$tag]->nid, 'Search tag ranking for "<' . $sorted_tags[$tag_rank] . '>" order.');
}
}
// Test tags with the same weight against the sorted tags.
$unsorted_tags = array(
'u',
'b',
'i',
'strong',
'em',
);
foreach ($unsorted_tags as $tag) {
$settings['body'] = array(
array(
'value' => "<{$tag}>Drupal Rocks</{$tag}>",
'format' => 'full_html',
),
);
$node = $this
->drupalCreateNode($settings);
// Update the search index.
module_invoke_all('update_index');
search_update_totals();
// Refresh variables after the treatment.
$this
->refreshVariables();
$set = node_search_execute('rocks');
// Ranking should always be second to last.
$set = array_slice($set, -2, 1);
// Assert the results.
$this
->assertEqual($set[0]['node']->nid, $node->nid, 'Search tag ranking for "<' . $tag . '>" order.');
// Delete node so it doesn't show up in subsequent search results.
$node
->delete();
}
}