public function ExposedFormTest::testExposedSortAndItemsPerPage in Drupal 9
Same name and namespace in other branches
- 8 core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php \Drupal\Tests\views\Functional\Plugin\ExposedFormTest::testExposedSortAndItemsPerPage()
Tests exposed forms with exposed sort and items per page.
File
- core/
modules/ views/ tests/ src/ Functional/ Plugin/ ExposedFormTest.php, line 348
Class
- ExposedFormTest
- Tests exposed forms functionality.
Namespace
Drupal\Tests\views\Functional\PluginCode
public function testExposedSortAndItemsPerPage() {
for ($i = 0; $i < 50; $i++) {
$entity = EntityTest::create([]);
$entity
->save();
}
$contexts = [
'languages:language_interface',
'entity_test_view_grants',
'theme',
'url.query_args',
'languages:language_content',
];
$this
->drupalGet('test_exposed_form_sort_items_per_page');
$this
->assertCacheContexts($contexts);
$this
->assertIds(range(1, 10, 1));
$this
->drupalGet('test_exposed_form_sort_items_per_page', [
'query' => [
'sort_order' => 'DESC',
],
]);
$this
->assertCacheContexts($contexts);
$this
->assertIds(range(50, 41, 1));
$this
->drupalGet('test_exposed_form_sort_items_per_page', [
'query' => [
'sort_order' => 'DESC',
'items_per_page' => 25,
],
]);
$this
->assertCacheContexts($contexts);
$this
->assertIds(range(50, 26, 1));
$this
->drupalGet('test_exposed_form_sort_items_per_page', [
'query' => [
'sort_order' => 'DESC',
'items_per_page' => 25,
'offset' => 10,
],
]);
$this
->assertCacheContexts($contexts);
$this
->assertIds(range(40, 16, 1));
$view = Views::getView('test_exposed_form_sort_items_per_page');
$view
->setDisplay();
$sorts = $view->display_handler
->getOption('sorts');
// Change the label to something with special characters.
$sorts['id']['expose']['label'] = $expected_label = "<script>alert('unsafe&dangerous');</script>";
// Use a custom sort field identifier.
$sorts['id']['expose']['field_identifier'] = $field_identifier = $this
->randomMachineName() . '-_.~';
$view->display_handler
->setOption('sorts', $sorts);
$view
->save();
// Test label escaping.
$this
->drupalGet('test_exposed_form_sort_items_per_page');
$options = $this
->assertSession()
->selectExists('edit-sort-by')
->findAll('css', 'option');
$this
->assertCount(1, $options);
// Check option existence by option label.
$this
->assertSession()
->optionExists('Sort by', $expected_label);
// Check option existence by option value.
$this
->assertSession()
->optionExists('Sort by', $field_identifier);
$escape_1 = Html::escape($expected_label);
$escape_2 = Html::escape($escape_1);
// Make sure we see the single-escaped string in the raw output.
$this
->assertSession()
->responseContains($escape_1);
// But no double-escaped string.
$this
->assertSession()
->responseNotContains($escape_2);
// And not the raw label, either.
$this
->assertSession()
->responseNotContains($expected_label);
// Check that the custom field identifier is used in the URL query string.
$this
->submitForm([
'sort_order' => 'DESC',
], 'Apply');
$this
->assertCacheContexts($contexts);
$this
->assertIds(range(50, 41));
$url = $this
->getSession()
->getCurrentUrl();
$this
->assertStringContainsString('sort_by=' . urlencode($field_identifier), $url);
}