View source
<?php
namespace Drupal\Tests\filter\Functional;
use Drupal\Component\Render\FormattableMarkup;
use Drupal\filter\Entity\FilterFormat;
use Drupal\Tests\BrowserTestBase;
class FilterFormTest extends BrowserTestBase {
protected static $modules = [
'filter',
'filter_test',
];
protected $defaultTheme = 'stark';
protected $adminUser;
protected $webUser;
protected function setUp() {
parent::setUp();
$filter_test_format = FilterFormat::load('filter_test');
$filtered_html_format = FilterFormat::load('filtered_html');
$full_html_format = FilterFormat::load('full_html');
$this->adminUser = $this
->drupalCreateUser([
'administer filters',
$filtered_html_format
->getPermissionName(),
$full_html_format
->getPermissionName(),
$filter_test_format
->getPermissionName(),
]);
$this->webUser = $this
->drupalCreateUser([
$filtered_html_format
->getPermissionName(),
$filter_test_format
->getPermissionName(),
]);
}
public function testFilterForm() {
$this
->doFilterFormTestAsAdmin();
$this
->doFilterFormTestAsNonAdmin();
\Drupal::service('module_installer')
->install([
'filter_test_plugin',
]);
}
protected function doFilterFormTestAsAdmin() {
$this
->drupalLogin($this->adminUser);
$this
->drupalGet('filter-test/text-format');
$formats = [
'filtered_html',
'full_html',
'filter_test',
];
$this
->assertEnabledTextarea('edit-all-formats-no-default-value');
$this
->assertOptions('edit-all-formats-no-default-format--2', $formats, 'filtered_html');
$this
->assertEnabledTextarea('edit-all-formats-default-value');
$this
->assertOptions('edit-all-formats-default-format--2', $formats, 'filter_test');
$this
->assertEnabledTextarea('edit-all-formats-default-missing-value');
$this
->assertRequiredSelectAndOptions('edit-all-formats-default-missing-format--2', $formats);
$formats = [
'full_html',
'filter_test',
];
$this
->assertEnabledTextarea('edit-restricted-formats-no-default-value');
$this
->assertOptions('edit-restricted-formats-no-default-format--2', $formats, 'full_html');
$this
->assertEnabledTextarea('edit-restricted-formats-default-value');
$this
->assertOptions('edit-restricted-formats-default-format--2', $formats, 'full_html');
$this
->assertEnabledTextarea('edit-restricted-formats-default-missing-value');
$this
->assertRequiredSelectAndOptions('edit-restricted-formats-default-missing-format--2', $formats);
$this
->assertEnabledTextarea('edit-restricted-formats-default-disallowed-value');
$this
->assertRequiredSelectAndOptions('edit-restricted-formats-default-disallowed-format--2', $formats);
$formats = [
'filter_test',
];
$this
->assertEnabledTextarea('edit-single-format-no-default-value');
$this
->assertNoSelect('edit-single-format-no-default-format--2');
$this
->assertEnabledTextarea('edit-single-format-default-value');
$this
->assertNoSelect('edit-single-format-default-format--2');
$this
->assertEnabledTextarea('edit-single-format-default-missing-value');
$this
->assertRequiredSelectAndOptions('edit-single-format-default-missing-format--2', $formats);
$this
->assertEnabledTextarea('edit-single-format-default-disallowed-value');
$this
->assertRequiredSelectAndOptions('edit-single-format-default-disallowed-format--2', $formats);
}
protected function doFilterFormTestAsNonAdmin() {
$this
->drupalLogin($this->webUser);
$this
->drupalGet('filter-test/text-format');
$formats = [
'filtered_html',
'filter_test',
];
$this
->assertEnabledTextarea('edit-all-formats-no-default-value');
$this
->assertOptions('edit-all-formats-no-default-format--2', $formats, 'filtered_html');
$this
->assertEnabledTextarea('edit-all-formats-default-value');
$this
->assertOptions('edit-all-formats-default-format--2', $formats, 'filter_test');
$this
->assertDisabledTextarea('edit-all-formats-default-missing-value');
$this
->assertEnabledTextarea('edit-restricted-formats-no-default-value');
$this
->assertNoSelect('edit-restricted-formats-no-default-format--2');
$this
->assertDisabledTextarea('edit-restricted-formats-default-value');
$this
->assertDisabledTextarea('edit-restricted-formats-default-missing-value');
$this
->assertDisabledTextarea('edit-restricted-formats-default-disallowed-value');
$this
->assertEnabledTextarea('edit-single-format-no-default-value');
$this
->assertNoSelect('edit-single-format-no-default-format--2');
$this
->assertEnabledTextarea('edit-single-format-default-value');
$this
->assertNoSelect('edit-single-format-default-format--2');
$this
->assertDisabledTextarea('edit-single-format-default-missing-value');
$this
->assertDisabledTextarea('edit-single-format-default-disallowed-value');
}
protected function assertNoSelect($id) {
$select = $this
->xpath('//select[@id=:id]', [
':id' => $id,
]);
$this
->assertEmpty($select, new FormattableMarkup('Field @id does not exist.', [
'@id' => $id,
]));
}
protected function assertOptions($id, array $expected_options, $selected) {
$select = $this
->xpath('//select[@id=:id]', [
':id' => $id,
]);
$this
->assertNotEmpty($select, new FormattableMarkup('Field @id exists.', [
'@id' => $id,
]));
$select = reset($select);
$found_options = $select
->findAll('css', 'option');
foreach ($found_options as $found_key => $found_option) {
$expected_key = array_search($found_option
->getValue(), $expected_options);
if ($expected_key !== FALSE) {
unset($found_options[$found_key]);
unset($expected_options[$expected_key]);
}
}
foreach ($expected_options as $expected_option) {
$this
->fail(new FormattableMarkup('Option @option for field @id exists.', [
'@option' => $expected_option,
'@id' => $id,
]));
}
foreach ($found_options as $found_option) {
$this
->fail(new FormattableMarkup('Option @option for field @id does not exist.', [
'@option' => $found_option
->getValue(),
'@id' => $id,
]));
}
$this
->assertOptionSelected($id, $selected);
}
protected function assertRequiredSelectAndOptions($id, array $options) {
$select = $this
->xpath('//select[@id=:id and contains(@required, "required")]', [
':id' => $id,
]);
$this
->assertNotEmpty($select, new FormattableMarkup('Required field @id exists.', [
'@id' => $id,
]));
$options[] = '';
$this
->assertOptions($id, $options, '');
}
protected function assertEnabledTextarea($id) {
$textarea = $this
->xpath('//textarea[@id=:id and not(contains(@disabled, "disabled"))]', [
':id' => $id,
]);
$this
->assertNotEmpty($textarea, new FormattableMarkup('Enabled field @id exists.', [
'@id' => $id,
]));
}
protected function assertDisabledTextarea($id) {
$textarea = $this
->xpath('//textarea[@id=:id and contains(@disabled, "disabled")]', [
':id' => $id,
]);
$this
->assertNotEmpty($textarea, new FormattableMarkup('Disabled field @id exists.', [
'@id' => $id,
]));
$textarea = reset($textarea);
$expected = 'This field has been disabled because you do not have sufficient permissions to edit it.';
$this
->assertEqual($textarea
->getText(), $expected, new FormattableMarkup('Disabled textarea @id hides text in an inaccessible text format.', [
'@id' => $id,
]));
$select_id = str_replace('value', 'format--2', $id);
$this
->assertNoSelect($select_id);
}
}