You are here

public function WebformStatesWizardTest::testFormStatesValidatorWizard in Webform 8.5

Same name and namespace in other branches
  1. 6.x tests/src/Functional/States/WebformStatesWizardTest.php \Drupal\Tests\webform\Functional\States\WebformStatesWizardTest::testFormStatesValidatorWizard()

Tests webform submission conditions (#states) validator wizard cross-page conditions.

File

tests/src/Functional/States/WebformStatesWizardTest.php, line 27

Class

WebformStatesWizardTest
Tests for webform states wizard server.

Namespace

Drupal\Tests\webform\Functional\States

Code

public function testFormStatesValidatorWizard() {
  $webform = Webform::load('test_states_server_wizard');

  /**************************************************************************/

  // Go to default #states for page 02 with trigger-checkbox unchecked.
  $this
    ->postSubmission($webform, [], 'Next >');
  $this
    ->assertRaw("page_01_trigger_checkbox: 0\npage_01_textfield_required: '{default_value}'\npage_01_textfield_optional: '{default_value}'\npage_01_textfield_disabled: ''\npage_01_textfield_enabled: ''\npage_01_textfield_visible: ''\npage_01_textfield_invisible: ''\npage_01_checkbox_checked: 0\npage_01_checkbox_unchecked: 0\npage_02_textfield_required: '{default_value}'\npage_02_textfield_optional: '{default_value}'\npage_02_textfield_disabled: ''\npage_02_textfield_enabled: ''\npage_02_textfield_visible: '{default_value}'\npage_02_textfield_visible_slide: '{default_value}'\npage_02_textfield_invisible: '{default_value}'\npage_02_textfield_invisible_slide: '{default_value}'\npage_02_checkbox_checked: 0\npage_02_checkbox_unchecked: 0\npage_03_textfield_required: '{default_value}'\npage_01_trigger_checkbox_computed: 'No'");

  // Check trigger-checkbox value is No.
  $this
    ->assertFieldByName('page_01_trigger_checkbox_computed', 'No');

  // Check page_02_textfield_required is not required.
  $this
    ->assertNoCssSelect('[name="page_02_textfield_required"][required]');

  // Check page_02_textfield_optional is required.
  $this
    ->assertCssSelect('[name="page_02_textfield_optional"][required]');

  // Check page_02_textfield_disabled is not disabled.
  $this
    ->assertNoCssSelect('[name="page_02_textfield_disabled"][disabled]');

  // Check page_02_textfield_enabled is disabled.
  $this
    ->assertCssSelect('[name="page_02_textfield_enabled"][disabled]');

  // Check page_02_textfield_visible is hidden via .js-webform-states-hidden.
  $this
    ->assertCssSelect('.form-item-page-02-textfield-visible.js-webform-states-hidden');

  // Check page_02_textfield_visible_slide is hidden via .js-webform-states-hidden.
  $this
    ->assertCssSelect('.form-item-page-02-textfield-visible-slide.js-webform-states-hidden');

  // Check page_02_textfield_invisible is visible.
  $this
    ->assertFieldByName('page_02_textfield_invisible', '{default_value}');

  // Check page_02_textfield_invisible_slide is visible.
  $this
    ->assertFieldByName('page_02_textfield_invisible_slide', '{default_value}');

  // Check page_02_checkbox_checked is not checked.
  $this
    ->assertNoFieldChecked('page_02_checkbox_checked');

  // Check page_02_checkbox_unchecked is checked.
  $this
    ->assertFieldChecked('page_02_checkbox_unchecked');

  // Check page_02_details_expanded is not open.
  $this
    ->assertCssSelect('details[id="edit-page-02-details-expanded"]');
  $this
    ->assertNoCssSelect('details[id="edit-page-02-details-expanded"][open]');

  // Check page_02_details_collapsed is open.
  $this
    ->assertCssSelect('details[id="edit-page-02-details-collapsed"][open]');

  // Check submission data.
  $this
    ->drupalPostForm(NULL, [], 'Submit');
  $this
    ->assertRaw("page_01_trigger_checkbox: 0\npage_01_textfield_required: '{default_value}'\npage_01_textfield_optional: '{default_value}'\npage_01_textfield_disabled: ''\npage_01_textfield_enabled: ''\npage_01_textfield_visible: ''\npage_01_textfield_invisible: ''\npage_01_checkbox_checked: 0\npage_01_checkbox_unchecked: 0\npage_02_textfield_required: '{default_value}'\npage_02_textfield_optional: '{default_value}'\npage_02_textfield_disabled: ''\npage_02_textfield_enabled: ''\npage_02_textfield_visible: ''\npage_02_textfield_visible_slide: ''\npage_02_textfield_invisible: '{default_value}'\npage_02_textfield_invisible_slide: '{default_value}'\npage_02_checkbox_checked: 0\npage_02_checkbox_unchecked: 1\npage_03_textfield_required: ''\npage_01_trigger_checkbox_computed: 'No'");

  /**************************************************************************/

  // Go to default #states for page 02 with trigger_checkbox checked.
  $this
    ->postSubmission($webform, [
    'page_01_trigger_checkbox' => TRUE,
  ], 'Next >');
  $this
    ->assertRaw("page_01_trigger_checkbox: 1\npage_01_textfield_required: '{default_value}'\npage_01_textfield_optional: '{default_value}'\npage_01_textfield_disabled: ''\npage_01_textfield_enabled: ''\npage_01_textfield_visible: ''\npage_01_textfield_invisible: ''\npage_01_checkbox_checked: 0\npage_01_checkbox_unchecked: 0\npage_02_textfield_required: '{default_value}'\npage_02_textfield_optional: '{default_value}'\npage_02_textfield_disabled: ''\npage_02_textfield_enabled: ''\npage_02_textfield_visible: '{default_value}'\npage_02_textfield_visible_slide: '{default_value}'\npage_02_textfield_invisible: '{default_value}'\npage_02_textfield_invisible_slide: '{default_value}'\npage_02_checkbox_checked: 0\npage_02_checkbox_unchecked: 0\npage_03_textfield_required: '{default_value}'\npage_01_trigger_checkbox_computed: 'Yes'");

  // Check trigger-checkbox value is Yes.
  $this
    ->assertCssSelect('[name="page_01_trigger_checkbox_computed"][value="Yes"]');

  // Check page_02_textfield_required is required.
  $this
    ->assertCssSelect('[name="page_02_textfield_required"][required]');

  // Check page_02_textfield_optional is not required.
  $this
    ->assertNoCssSelect('[name="page_02_textfield_optional"][required]');

  // Check page_02_textfield_disabled is disabled.
  $this
    ->assertCssSelect('[name="page_02_textfield_disabled"][disabled="disabled"]');

  // Check page_02_textfield_enabled is not disabled.
  $this
    ->assertNoCssSelect('[name="page_02_textfield_enabled"][disabled="disabled"]');

  // Check page_02_textfield_visible is visible.
  $this
    ->assertFieldByName('page_02_textfield_visible', '{default_value}');

  // Check page_02_textfield_visible_slide is visible.
  $this
    ->assertFieldByName('page_02_textfield_visible_slide', '{default_value}');

  // Check page_02_textfield_invisible is hidden with no default value.
  $this
    ->assertCssSelect('.form-item-page-02-textfield-invisible.js-webform-states-hidden');
  $this
    ->assertNoFieldByName('page_02_textfield_invisible', '{default_value}');
  $this
    ->assertFieldByName('page_02_textfield_invisible', '');

  // Check page_02_textfield_invisible_slides is hidden with no default value.
  $this
    ->assertCssSelect('.form-item-page-02-textfield-invisible-slide.js-webform-states-hidden');
  $this
    ->assertNoFieldByName('page_02_textfield_invisible_slide', '{default_value}');
  $this
    ->assertFieldByName('page_02_textfield_invisible_slide', '');

  // Check page_02_checkbox_checked is checked.
  $this
    ->assertFieldChecked('page_02_checkbox_checked');

  // Check page_02_checkbox_unchecked is not checked.
  $this
    ->assertNoFieldChecked('page_02_checkbox_unchecked');

  // Check page_02_details_expanded is open.
  $this
    ->assertCssSelect('details[id="edit-page-02-details-expanded"][open]');

  // Check page_02_details_collapsed is not open.
  $this
    ->assertNoCssSelect('details[id="edit-page-02-details-collapsed"][open]');

  // Check third page data.
  $this
    ->drupalPostForm(NULL, [], 'Next >');
  $this
    ->assertRaw("page_01_trigger_checkbox: 1\npage_01_textfield_required: '{default_value}'\npage_01_textfield_optional: '{default_value}'\npage_01_textfield_disabled: ''\npage_01_textfield_enabled: ''\npage_01_textfield_visible: ''\npage_01_textfield_invisible: ''\npage_01_checkbox_checked: 0\npage_01_checkbox_unchecked: 0\npage_02_textfield_required: '{default_value}'\npage_02_textfield_optional: '{default_value}'\npage_02_textfield_disabled: ''\npage_02_textfield_enabled: ''\npage_02_textfield_visible: '{default_value}'\npage_02_textfield_visible_slide: '{default_value}'\npage_02_textfield_invisible: ''\npage_02_textfield_invisible_slide: ''\npage_02_checkbox_checked: 1\npage_02_checkbox_unchecked: 0\npage_03_textfield_required: '{default_value}'\npage_01_trigger_checkbox_computed: 'Yes'");

  // Check submission data.
  $this
    ->drupalPostForm(NULL, [], 'Submit');
  $this
    ->assertRaw("page_01_trigger_checkbox: 1\npage_01_textfield_required: '{default_value}'\npage_01_textfield_optional: '{default_value}'\npage_01_textfield_disabled: ''\npage_01_textfield_enabled: ''\npage_01_textfield_visible: ''\npage_01_textfield_invisible: ''\npage_01_checkbox_checked: 0\npage_01_checkbox_unchecked: 0\npage_02_textfield_required: '{default_value}'\npage_02_textfield_optional: '{default_value}'\npage_02_textfield_disabled: ''\npage_02_textfield_enabled: ''\npage_02_textfield_visible: '{default_value}'\npage_02_textfield_visible_slide: '{default_value}'\npage_02_textfield_invisible: ''\npage_02_textfield_invisible_slide: ''\npage_02_checkbox_checked: 1\npage_02_checkbox_unchecked: 0\npage_03_textfield_required: '{default_value}'\npage_01_trigger_checkbox_computed: 'Yes'");
}