View source
<?php
namespace Drupal\Tests\views\Functional;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\Url;
use Drupal\views\Tests\AssertViewsCacheTagsTrait;
use Drupal\views\Views;
class GlossaryTest extends ViewTestBase {
use AssertViewsCacheTagsTrait;
protected static $modules = [
'node',
];
protected $defaultTheme = 'stark';
public function testGlossaryView() {
$type = $this
->drupalCreateContentType();
$nodes_per_char = [
'd' => 1,
'r' => 4,
'u' => 10,
'p' => 2,
'a' => 3,
'l' => 6,
];
$nodes_by_char = [];
foreach ($nodes_per_char as $char => $count) {
$setting = [
'type' => $type
->id(),
];
for ($i = 0; $i < $count; $i++) {
$node = $setting;
$node['title'] = $char . $this
->randomString(3);
$node = $this
->drupalCreateNode($node);
$nodes_by_char[$char][] = $node;
}
}
$view = Views::getView('glossary');
$view
->setDisplay('attachment_1');
$view
->executeDisplay('attachment_1');
foreach ($view->result as $item) {
$this
->assertEquals($nodes_per_char[$item->title_truncated], $item->num_records);
}
$view->storage
->enable()
->save();
$this->container
->get('router.builder')
->rebuildIfNeeded();
$url = Url::fromRoute('view.glossary.page_1');
$this
->assertPageCacheContextsAndTags($url, [
'timezone',
'languages:' . LanguageInterface::TYPE_CONTENT,
'languages:' . LanguageInterface::TYPE_INTERFACE,
'theme',
'url',
'user.node_grants:view',
'user.permissions',
'route',
], [
'config:views.view.glossary',
'node:' . $nodes_by_char['a'][0]
->id(),
'node:' . $nodes_by_char['a'][1]
->id(),
'node:' . $nodes_by_char['a'][2]
->id(),
'node:1',
'node:16',
'node:2',
'node:21',
'node:6',
'node_list',
'user:0',
'user_list',
'http_response',
'rendered',
'config:user.role.anonymous',
]);
$this
->drupalGet($url);
$this
->assertSession()
->statusCodeEquals(200);
foreach ($nodes_per_char as $char => $count) {
$href = Url::fromRoute('view.glossary.page_1', [
'arg_0' => $char,
])
->toString();
$label = mb_strtoupper($char);
$result = $this
->assertSession()
->elementExists('xpath', "//a[contains(@href, '{$href}') and normalize-space(text())='{$label}']/..");
$result_count = explode(' ', trim(str_replace([
'|',
'(',
')',
], '', $result
->getText())))[1];
$this
->assertEquals($count, $result_count, 'The expected number got rendered.');
}
}
}