You are here

public function WebformSettingsAjaxJavaScriptTest::testAjax in Webform 8.5

Same name and namespace in other branches
  1. 6.x tests/src/FunctionalJavascript/Settings/WebformSettingsAjaxJavaScriptTest.php \Drupal\Tests\webform\FunctionalJavascript\Settings\WebformSettingsAjaxJavaScriptTest::testAjax()

Tests Ajax.

File

tests/src/FunctionalJavascript/Settings/WebformSettingsAjaxJavaScriptTest.php, line 33

Class

WebformSettingsAjaxJavaScriptTest
Tests webform JavaScript.

Namespace

Drupal\Tests\webform\FunctionalJavascript\Settings

Code

public function testAjax() {
  $assert_session = $this
    ->assertSession();

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

  // Test Ajax. (test_ajax)

  /**************************************************************************/
  $webform_ajax = Webform::load('test_ajax');

  // Validate form.
  $this
    ->drupalPostForm($webform_ajax
    ->toUrl(), [
    'textfield' => '',
  ], 'Submit');
  $assert_session
    ->waitForElement('css', '.messages--error');

  // Check validation message.
  $assert_session
    ->responseContains('textfield field is required.');

  // Preview form.
  $this
    ->drupalPostForm($webform_ajax
    ->toUrl(), [
    'textfield' => 'test value',
  ], 'Preview');
  $assert_session
    ->waitForElement('css', '.messages--warning');

  // Check preview message.
  $assert_session
    ->responseContains('Please review your submission. Your submission is not complete until you press the "Submit" button!');

  // Submit form.
  $this
    ->drupalPostForm($webform_ajax
    ->toUrl(), [
    'textfield' => 'test value',
  ], 'Submit');
  $assert_session
    ->waitForElement('css', '.messages--status');

  // Check submit message.
  $assert_session
    ->responseContains('New submission added to Test: Ajax.');

  // Check that submission was created.
  $sid = $this
    ->getLastSubmissionId($webform_ajax);
  $this
    ->assertEquals($sid, 1);

  // Check that text field is blank.
  $assert_session
    ->fieldValueEquals('textfield', '');

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

  // Test Ajax confirmation inline. (test_ajax_confirmation_inline)

  /**************************************************************************/
  $webform_ajax_confirmation_inline = Webform::load('test_ajax_confirmation_inline');

  // Submit form.
  $this
    ->drupalPostForm($webform_ajax_confirmation_inline
    ->toUrl(), [], 'Submit');
  $assert_session
    ->waitForElement('css', '.messages--status');
  $assert_session
    ->waitForText('This is a custom inline confirmation message.');

  // Check submit message.
  $assert_session
    ->responseContains('This is a custom inline confirmation message.');

  // Click back to form.
  $this
    ->clickLink('Back to form');
  $assert_session
    ->waitForButton('Submit');

  // Check submit message.
  $assert_session
    ->responseNotContains('This is a custom inline confirmation message.');
  $assert_session
    ->responseContains('This webform will display the confirmation inline when submitted.');

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

  // Test Ajax confirmation message. (test_ajax_confirmation_message)

  /**************************************************************************/
  $webform_ajax_confirmation_message = Webform::load('test_ajax_confirmation_message');

  // Submit form.
  $this
    ->drupalPostForm($webform_ajax_confirmation_message
    ->toUrl(), [], 'Submit');
  $assert_session
    ->waitForElement('css', '.messages--status');

  // Check confirmation message.
  $assert_session
    ->responseContains('This is a <b>custom</b> confirmation message.');
  $assert_session
    ->responseContains('This webform will display a confirmation message when submitted.');

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

  // Test Ajax confirmation message. (test_ajax_confirmation_modal)

  /**************************************************************************/
  $webform_ajax_confirmation_modal = Webform::load('test_ajax_confirmation_modal');

  // Submit form.
  $this
    ->drupalPostForm($webform_ajax_confirmation_modal
    ->toUrl(), [], 'Submit');
  $assert_session
    ->waitForElementVisible('css', '.ui-dialog.webform-confirmation-modal');

  // Check confirmation modal.
  $assert_session
    ->responseContains('This is a <b>custom</b> confirmation modal.');

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

  // Test Ajax confirmation page. (test_ajax_confirmation_page)

  /**************************************************************************/
  $webform_ajax_confirmation_page = Webform::load('test_ajax_confirmation_page');

  // Submit form.
  $this
    ->drupalPostForm($webform_ajax_confirmation_page
    ->toUrl(), [], 'Submit');
  $assert_session
    ->waitForLink('Back to form');

  // Check confirmation page message.
  $assert_session
    ->responseContains('This is a custom confirmation page.');

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

  // Test Ajax confirmation url. (test_ajax_confirmation_url)

  /**************************************************************************/
  $webform_ajax_confirmation_url = Webform::load('test_ajax_confirmation_url');

  // Submit form.
  $this
    ->drupalPostForm($webform_ajax_confirmation_url
    ->toUrl(), [], 'Submit');
  $assert_session
    ->waitForElement('css', '.path-front');

  // Check current page is <front>.
  $this
    ->assertSession()
    ->addressEquals('/');

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

  // Test Ajax confirmation url with message. (test_ajax_confirmation_url_msg)

  /**************************************************************************/
  $webform_ajax_confirmation_url_msg = Webform::load('test_ajax_confirmation_url_msg');

  // Submit form.
  $this
    ->drupalPostForm($webform_ajax_confirmation_url_msg
    ->toUrl(), [], 'Submit');
  $assert_session
    ->waitForElement('css', '.path-front');

  // Check current page is <front>.
  $this
    ->assertSession()
    ->addressEquals('/');

  // Check confirmation message.
  $assert_session
    ->responseContains('This is a custom confirmation message.');
}