public function WebformSettingsBehaviorsTest::testSettings in Webform 8.5
Same name and namespace in other branches
- 6.x tests/src/Functional/Settings/WebformSettingsBehaviorsTest.php \Drupal\Tests\webform\Functional\Settings\WebformSettingsBehaviorsTest::testSettings()
Tests webform setting including confirmation.
File
- tests/
src/ Functional/ Settings/ WebformSettingsBehaviorsTest.php, line 45
Class
- WebformSettingsBehaviorsTest
- Tests for webform settings behaviors.
Namespace
Drupal\Tests\webform\Functional\SettingsCode
public function testSettings() {
$this
->drupalLogin($this->rootUser);
/**************************************************************************/
/* Test webform submit once (form_submit_once) */
/**************************************************************************/
$webform_form_submit_once = Webform::load('test_form_submit_once');
// Check webform has webform.form.submit_once.js.
$this
->drupalGet('/webform/test_form_submit_once');
$this
->assertRaw('webform.form.submit_once.js');
// Disable YAML specific form_submit_once setting.
$webform_form_submit_once
->setSetting('form_submit_once', FALSE);
$webform_form_submit_once
->save();
// Check submit once checkbox is enabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_submit_once/settings/form');
$this
->assertRaw('<input data-drupal-selector="edit-form-submit-once" aria-describedby="edit-form-submit-once--description" type="checkbox" id="edit-form-submit-once" name="form_submit_once" value class="form-checkbox" />');
// Check webform no longer has webform.form.submit_once.js.
$this
->drupalGet('/webform/test_form_submit_once');
$this
->assertNoRaw('webform.form.submit_once.js');
// Enable default (global) submit_once on all webforms.
\Drupal::configFactory()
->getEditable('webform.settings')
->set('settings.default_form_submit_once', TRUE)
->save();
// Check submit_once checkbox is disabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_submit_once/settings/form');
$this
->assertRaw('<input data-drupal-selector="edit-form-submit-once-disabled" aria-describedby="edit-form-submit-once-disabled--description" disabled="disabled" type="checkbox" id="edit-form-submit-once-disabled" name="form_submit_once_disabled" value="1" checked="checked" class="form-checkbox" />');
$this
->assertRaw('Submit button is disabled immediately after it is clicked for all forms.');
// Check webform has webform.form.submit_once.js.
$this
->drupalGet('/webform/test_form_submit_once');
$this
->assertRaw('webform.form.submit_once.js');
/**************************************************************************/
/* Test webform disable back button (form_disable_back) */
/**************************************************************************/
$webform_form_disable_back = Webform::load('test_form_disable_back');
// Check webform has webform.form.disable_back.js.
$this
->drupalGet('/webform/test_form_disable_back');
$this
->assertRaw('webform.form.disable_back.js');
// Disable webform specific form_disable_back setting.
$webform_form_disable_back
->setSetting('form_disable_back', FALSE);
$webform_form_disable_back
->save();
// Check disable_back checkbox is enabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_disable_back/settings/form');
$this
->assertRaw('<input data-drupal-selector="edit-form-disable-back" aria-describedby="edit-form-disable-back--description" type="checkbox" id="edit-form-disable-back" name="form_disable_back" value class="form-checkbox" />');
// Check webform no longer has webform.form.disable_back.js.
$this
->drupalGet('/webform/test_form_disable_back');
$this
->assertNoRaw('webform.form.disable_back.js');
// Enable default (global) disable_back on all webforms.
\Drupal::configFactory()
->getEditable('webform.settings')
->set('settings.default_form_disable_back', TRUE)
->save();
// Check disable_back checkbox is disabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_disable_back/settings/form');
$this
->assertRaw('<input data-drupal-selector="edit-form-disable-back-disabled" aria-describedby="edit-form-disable-back-disabled--description" disabled="disabled" type="checkbox" id="edit-form-disable-back-disabled" name="form_disable_back_disabled" value="1" checked="checked" class="form-checkbox" />');
$this
->assertRaw('Back button is disabled for all forms.');
// Check webform has webform.form.disable_back.js.
$this
->drupalGet('/webform/test_form_disable_back');
$this
->assertRaw('webform.form.disable_back.js');
/**************************************************************************/
/* Test webform submit back button (test_form_submit_back) */
/**************************************************************************/
$webform_form_submit_back = Webform::load('test_form_submit_back');
// Check webform has webform.form.submit_back.js.
$this
->drupalGet('/webform/test_form_submit_back');
$this
->assertRaw('webform.form.submit_back.js');
// Disable YAML specific form_submit_back setting.
$webform_form_submit_back
->setSetting('form_submit_back', FALSE);
$webform_form_submit_back
->save();
// Check submit_back checkbox is enabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_submit_back/settings/form');
$this
->assertRaw('<input data-drupal-selector="edit-form-submit-back" aria-describedby="edit-form-submit-back--description" type="checkbox" id="edit-form-submit-back" name="form_submit_back" value class="form-checkbox" />');
// Check webform no longer has webform.form.submit_back.js.
$this
->drupalGet('/webform/test_form_submit_back');
$this
->assertNoRaw('webform.form.submit_back.js');
// Enable default (global) submit_back on all webforms.
\Drupal::configFactory()
->getEditable('webform.settings')
->set('settings.default_form_submit_back', TRUE)
->save();
// Check submit_back checkbox is disabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_submit_back/settings/form');
$this
->assertRaw('<input data-drupal-selector="edit-form-submit-back-disabled" aria-describedby="edit-form-submit-back-disabled--description" disabled="disabled" type="checkbox" id="edit-form-submit-back-disabled" name="form_submit_back_disabled" value="1" checked="checked" class="form-checkbox" />');
$this
->assertRaw('Browser back button submits the previous page for all forms.');
// Check webform has webform.form.submit_back.js.
$this
->drupalGet('/webform/test_form_submit_back');
$this
->assertRaw('webform.form.submit_back.js');
// Enable Ajax support.
$webform_form_submit_back
->setSetting('ajax', TRUE);
$webform_form_submit_back
->save();
// Check webform does have webform.form.submit_back.js when
// Ajax is enabled.
$this
->drupalGet('/webform/test_form_submit_back');
$this
->assertNoRaw('webform.form.submit_back.js');
/**************************************************************************/
/* Test webform (client-side) unsaved (form_unsaved) */
/**************************************************************************/
$webform_form_unsaved = Webform::load('test_form_unsaved');
// Check webform has .js-webform-unsaved class.
$this
->drupalGet('/webform/test_form_unsaved');
$this
->assertCssSelect('form.js-webform-unsaved', 'Form has .js-webform-unsaved class.');
// Disable YAML specific webform unsaved setting.
$webform_form_unsaved
->setSetting('form_unsaved', FALSE);
$webform_form_unsaved
->save();
// Check novalidate checkbox is enabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_unsaved/settings/form');
$this
->assertRaw('<input data-drupal-selector="edit-form-unsaved" aria-describedby="edit-form-unsaved--description" type="checkbox" id="edit-form-unsaved" name="form_unsaved" value class="form-checkbox" />');
// Check webform no longer has .js-webform-unsaved class.
$this
->drupalGet('/webform/test_form_novalidate');
$this
->assertNoCssSelect('webform.js-webform-unsaved', 'Webform does not have .js-webform-unsaved class.');
// Enable default (global) unsaved on all webforms.
\Drupal::configFactory()
->getEditable('webform.settings')
->set('settings.default_form_unsaved', TRUE)
->save();
// Check unsaved checkbox is disabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_unsaved/settings/form');
$this
->assertRaw('<input data-drupal-selector="edit-form-unsaved-disabled" aria-describedby="edit-form-unsaved-disabled--description" disabled="disabled" type="checkbox" id="edit-form-unsaved-disabled" name="form_unsaved_disabled" value="1" checked="checked" class="form-checkbox" />');
$this
->assertRaw('Unsaved warning is enabled for all forms.');
// Check unsaved attribute added to webform.
$this
->drupalGet('/webform/test_form_unsaved');
$this
->assertCssSelect('form.js-webform-unsaved', 'Form has .js-webform-unsaved class.');
/**************************************************************************/
/* Test webform disable autocomplete (form_disable_autocomplete) */
/**************************************************************************/
// Check webform has autocomplete=off attribute.
$this
->drupalGet('/webform/test_form_disable_autocomplete');
$this
->assertCssSelect('form[autocomplete="off"]', 'Form has autocomplete=off attribute.');
/**************************************************************************/
/* Test webform (client-side) novalidate (form_novalidate) */
/**************************************************************************/
$webform_form_novalidate = Webform::load('test_form_novalidate');
// Check webform has novalidate attribute.
$this
->drupalGet('/webform/test_form_novalidate');
$this
->assertCssSelect('form[novalidate="novalidate"]', 'Form has the proper novalidate attribute.');
// Disable YAML specific webform client-side validation setting.
$webform_form_novalidate
->setSetting('form_novalidate', FALSE);
$webform_form_novalidate
->save();
// Check novalidate checkbox is enabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_novalidate/settings/form');
$this
->assertRaw('<input data-drupal-selector="edit-form-novalidate" aria-describedby="edit-form-novalidate--description" type="checkbox" id="edit-form-novalidate" name="form_novalidate" value class="form-checkbox" />');
$this
->assertRaw('If checked, the <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form">novalidate</a> attribute, which disables client-side validation, will be added to this form.');
// Check webform no longer has novalidate attribute.
$this
->drupalGet('/webform/test_form_novalidate');
$this
->assertNoCssSelect('form[novalidate="novalidate"]', 'Webform have client-side validation enabled.');
// Enable default (global) disable client-side validation on all webforms.
\Drupal::configFactory()
->getEditable('webform.settings')
->set('settings.default_form_novalidate', TRUE)
->save();
// Check novalidate checkbox is disabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_novalidate/settings/form');
$this
->assertNoRaw('If checked, the <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form">novalidate</a> attribute, which disables client-side validation, will be added to this form.');
$this
->assertRaw('<input data-drupal-selector="edit-form-novalidate-disabled" aria-describedby="edit-form-novalidate-disabled--description" disabled="disabled" type="checkbox" id="edit-form-novalidate-disabled" name="form_novalidate_disabled" value="1" checked="checked" class="form-checkbox" />');
$this
->assertRaw('Client-side validation is disabled for all forms.');
// Check novalidate attribute added to webform.
$this
->drupalGet('/webform/test_form_novalidate');
$this
->assertCssSelect('form[novalidate="novalidate"]', 'Form has the proper novalidate attribute.');
/**************************************************************************/
/* Test required indicator (form_required) */
/**************************************************************************/
$webform_form_required = Webform::load('test_form_required');
// Check webform has required indicator.
$this
->drupalGet('/webform/test_form_required');
$this
->assertRaw('Indicates required field');
// Disable required indicator.
$webform_form_required
->setSetting('form_required', FALSE);
$webform_form_required
->save();
// Check webform does not have have required indicator.
$this
->drupalGet('/webform/test_form_required');
$this
->assertNoRaw('Indicates required field');
// Enable default (global) required indicator on all webforms.
\Drupal::configFactory()
->getEditable('webform.settings')
->set('settings.default_form_required', TRUE)
->set('settings.default_form_required_label', 'Custom required field')
->save();
// Check required checkbox is disabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_required/settings/form');
$this
->assertRaw('Required indicator is displayed on all forms.');
$this
->assertRaw('<input data-drupal-selector="edit-form-required-disabled" aria-describedby="edit-form-required-disabled--description" disabled="disabled" type="checkbox" id="edit-form-required-disabled" name="form_required_disabled" value="1" checked="checked" class="form-checkbox" />');
// Check global required indicator added to webform.
$this
->drupalGet('/webform/test_form_required');
$this
->assertRaw('Custom required field');
$elements = $webform_form_required
->getElementsDecoded();
unset($elements['textfield']['#required']);
$webform_form_required
->setElements($elements);
$webform_form_required
->save();
// Check required indicator not added to webform with no required elements.
$this
->drupalGet('/webform/test_form_required');
$this
->assertNoRaw('Custom required field');
/**************************************************************************/
/* Test autofocus (form_autofocus) */
/**************************************************************************/
// Check webform has autofocus class.
$this
->drupalGet('/webform/test_form_autofocus');
$this
->assertCssSelect('.js-webform-autofocus');
/**************************************************************************/
/* Test webform details toggle (form_details_toggle) */
/**************************************************************************/
$webform_form_details_toggle = Webform::load('test_form_details_toggle');
// Check webform has .webform-details-toggle class.
$this
->drupalGet('/webform/test_form_details_toggle');
$this
->assertCssSelect('form.webform-details-toggle', 'Form has the .webform-details-toggle class.');
// Check details toggle checkbox is disabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_details_toggle/settings/form');
$this
->assertRaw('<input data-drupal-selector="edit-form-details-toggle-disabled" aria-describedby="edit-form-details-toggle-disabled--description" disabled="disabled" type="checkbox" id="edit-form-details-toggle-disabled" name="form_details_toggle_disabled" value="1" checked="checked" class="form-checkbox" />');
$this
->assertRaw('Expand/collapse all (details) link is automatically added to all forms.');
// Disable default (global) details toggle on all webforms.
\Drupal::configFactory()
->getEditable('webform.settings')
->set('settings.default_form_details_toggle', FALSE)
->save();
// Check .webform-details-toggle class still added to webform.
$this
->drupalGet('/webform/test_form_details_toggle');
$this
->assertCssSelect('form.webform-details-toggle', 'Form has the .webform-details-toggle class.');
// Check details toggle checkbox is enabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_details_toggle/settings/form');
$this
->assertRaw('<input data-drupal-selector="edit-form-details-toggle" aria-describedby="edit-form-details-toggle--description" type="checkbox" id="edit-form-details-toggle" name="form_details_toggle" value checked="checked" class="form-checkbox" />');
$this
->assertRaw('If checked, an expand/collapse all (details) link will be added to this webform when there are two or more details elements available on the webform.');
// Disable YAML specific webform details toggle setting.
$webform_form_details_toggle
->setSetting('form_details_toggle', FALSE);
$webform_form_details_toggle
->save();
// Check webform does not hav .webform-details-toggle class.
$this
->drupalGet('/webform/test_form_details_toggle');
$this
->assertNoCssSelect('webform.webform-details-toggle', 'Webform does not have the .webform-details-toggle class.');
/**************************************************************************/
/* Test webform disable inline form errors (test_form_disable_inline_errors) */
/**************************************************************************/
$webform_form_inline_errors = Webform::load('test_form_disable_inline_errors');
// Check that error message is displayed at the top of the page.
$this
->postSubmission($webform_form_inline_errors);
$this
->assertPattern('#<h2 class="visually-hidden">Error message</h2>\\s+textfield field is required.#m');
// Enable the inline form errors module.
\Drupal::service('module_installer')
->install([
'inline_form_errors',
]);
// Check that error message is still displayed at the top of the page.
$this
->postSubmission($webform_form_inline_errors);
$this
->assertPattern('#<h2 class="visually-hidden">Error message</h2>\\s+textfield field is required.#m');
// Allow inline error message for this form.
$webform_form_inline_errors
->setSetting('form_disable_inline_errors', FALSE);
$webform_form_inline_errors
->save();
// Check that error message is not displayed at the top of the page.
$this
->postSubmission($webform_form_inline_errors);
$this
->assertNoPattern('#<h2 class="visually-hidden">Error message</h2>\\s+textfield field is required.#m');
// Check that error message is displayed inline.
$this
->assertRaw('1 error has been found: <ul class="item-list__comma-list"><li><a href="#edit-textfield">textfield</a></li></ul>');
$this
->assertRaw('textfield field is required.');
// Check disable inline errors checkbox is enabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_disable_inline_errors/settings/form');
$this
->assertRaw('<input data-drupal-selector="edit-form-disable-inline-errors" aria-describedby="edit-form-disable-inline-errors--description" type="checkbox" id="edit-form-disable-inline-errors" name="form_disable_inline_errors" value class="form-checkbox" />');
$this
->assertRaw('If checked, <a href="https://www.drupal.org/docs/8/core/modules/inline-form-errors/inline-form-errors-module-overview">inline form errors</a> will be disabled for this form.');
// Enable default (global) disable inline form errors on all webforms.
\Drupal::configFactory()
->getEditable('webform.settings')
->set('settings.default_form_disable_inline_errors', TRUE)
->save();
// Check novalidate checkbox is disabled.
$this
->drupalGet('/admin/structure/webform/manage/test_form_disable_inline_errors/settings/form');
$this
->assertRaw('<input data-drupal-selector="edit-form-disable-inline-errors-disabled" aria-describedby="edit-form-disable-inline-errors-disabled--description" disabled="disabled" type="checkbox" id="edit-form-disable-inline-errors-disabled" name="form_disable_inline_errors_disabled" value="1" checked="checked" class="form-checkbox" />');
$this
->assertRaw('Inline form errors is disabled for all forms.');
// Check that error message is not displayed inline.
$this
->assertNoRaw('1 error has been found: <ul class="item-list__comma-list"><li><a href="#edit-textfield">textfield</a></li></ul>');
$this
->assertNoRaw('textfield field is required.');
}