public function SearchRankingTest::testHTMLRankings in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/search/src/Tests/SearchRankingTest.php \Drupal\search\Tests\SearchRankingTest::testHTMLRankings()
Test rankings of HTML tags.
File
- core/
modules/ search/ src/ Tests/ SearchRankingTest.php, line 205 - Contains \Drupal\search\Tests\SearchRankingTest.
Class
- SearchRankingTest
- Indexes content and tests ranking factors.
Namespace
Drupal\search\TestsCode
public function testHTMLRankings() {
$full_html_format = entity_create('filter_format', array(
'format' => 'full_html',
'name' => 'Full HTML',
));
$full_html_format
->save();
// 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',
);
$nodes = array();
foreach ($shuffled_tags as $tag) {
switch ($tag) {
case 'a':
$settings['body'] = array(
array(
'value' => \Drupal::l('Drupal Rocks', new Url('<front>')),
'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.
$this->nodeSearch
->getPlugin()
->updateIndex();
search_update_totals();
$this->nodeSearch
->getPlugin()
->setSearch('rocks', array(), array());
// Do the search and assert the results.
$set = $this->nodeSearch
->getPlugin()
->execute();
// 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']
->id(), $nodes[$tag]
->id(), 'Search tag ranking for plain text order.');
}
else {
$this
->assertEqual($set[$tag_rank]['node']
->id(), $nodes[$tag]
->id(), '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.
$this->nodeSearch
->getPlugin()
->updateIndex();
search_update_totals();
$this->nodeSearch
->getPlugin()
->setSearch('rocks', array(), array());
// Do the search and assert the results.
$set = $this->nodeSearch
->getPlugin()
->execute();
// Ranking should always be second to last.
$set = array_slice($set, -2, 1);
// Assert the results.
$this
->assertEqual($set[0]['node']
->id(), $node
->id(), 'Search tag ranking for "<' . $tag . '>" order.');
// Delete node so it doesn't show up in subsequent search results.
$node
->delete();
}
}