You are here

public function WebformSettingsConfirmationTest::testConfirmation in Webform 8.5

Same name and namespace in other branches
  1. 6.x tests/src/Functional/Settings/WebformSettingsConfirmationTest.php \Drupal\Tests\webform\Functional\Settings\WebformSettingsConfirmationTest::testConfirmation()

Tests webform submission form confirmation.

File

tests/src/Functional/Settings/WebformSettingsConfirmationTest.php, line 45

Class

WebformSettingsConfirmationTest
Tests for webform submission form confirmation.

Namespace

Drupal\Tests\webform\Functional\Settings

Code

public function testConfirmation() {

  // Login the admin user.
  $this
    ->drupalLogin($this->rootUser);

  /* Test confirmation message (confirmation_type=message) */
  $webform_confirmation_message = Webform::load('test_confirmation_message');

  // Check confirmation message.
  $this
    ->postSubmission($webform_confirmation_message);
  $this
    ->assertRaw('This is a <b>custom</b> confirmation message.');
  $this
    ->assertNoRaw('New submission added to <em class="placeholder">Test: Confirmation: Message</em>');
  $this
    ->assertUrl('webform/test_confirmation_message');

  // Check confirmation page with custom query parameters.
  $sid = $this
    ->postSubmission($webform_confirmation_message, [], NULL, [
    'query' => [
      'custom' => 'param',
    ],
  ]);
  $this
    ->assertUrl('webform/test_confirmation_message', [
    'query' => [
      'custom' => 'param',
    ],
  ]);

  // Sleep for 1 second to ensure the submission's timestamp indicates
  // it was update.
  sleep(1);

  // Check default message when submission is updated.
  $this
    ->drupalPostForm("/admin/structure/webform/manage/test_confirmation_message/submission/{$sid}/edit", [], 'Save');
  $this
    ->assertNoRaw('This is a <b>custom</b> confirmation message. (test: )');
  $this
    ->assertRaw('Submission updated in <em class="placeholder">Test: Confirmation: Message</em>.');

  // Set display confirmation when submission is updated.
  $webform_confirmation_message
    ->setSetting('confirmation_update', TRUE)
    ->save();

  // Check default message when submission is updated.
  $this
    ->drupalPostForm("/admin/structure/webform/manage/test_confirmation_message/submission/{$sid}/edit", [], 'Save');
  $this
    ->assertRaw('This is a <b>custom</b> confirmation message. (test: )');
  $this
    ->assertNoRaw('Submission updated in <em class="placeholder">Test: Confirmation: Message</em>.');

  /* Test confirmation message (confirmation_type=modal) */
  $webform_confirmation_modal = Webform::load('test_confirmation_modal');

  // Check confirmation modal.
  $sid = $this
    ->postSubmission($webform_confirmation_modal, [
    'test' => 'value',
  ]);
  $this
    ->assertRaw('This is a <b>custom</b> confirmation modal.');
  $this
    ->assertRaw('<div class="js-hide webform-confirmation-modal js-webform-confirmation-modal webform-message js-webform-message js-form-wrapper form-wrapper" data-drupal-selector="edit-webform-confirmation-modal" id="edit-webform-confirmation-modal">');
  $this
    ->assertRaw('<div role="contentinfo" aria-label="Status message">');
  $this
    ->assertRaw('<b class="webform-confirmation-modal--title">Custom confirmation modal</b><br />');
  $this
    ->assertRaw('<div class="webform-confirmation-modal--content">This is a <b>custom</b> confirmation modal. (test: value)</div>');
  $this
    ->assertUrl('webform/test_confirmation_modal');

  // Check confirmation modal update does not display modal.
  $this
    ->drupalPostForm("/admin/structure/webform/manage/test_confirmation_modal/submission/{$sid}/edit", [], 'Save');
  $this
    ->assertRaw('Submission updated in <em class="placeholder">Test: Confirmation: Modal</em>.');

  // Set display confirmation modal when submission is updated.
  $webform_confirmation_modal
    ->setSetting('confirmation_update', TRUE)
    ->save();

  // Check confirmation modal update does display modal.
  $this
    ->drupalPostForm("/admin/structure/webform/manage/test_confirmation_modal/submission/{$sid}/edit", [], 'Save');
  $this
    ->assertRaw('<b class="webform-confirmation-modal--title">Custom confirmation modal</b><br /><div class="webform-confirmation-modal--content">This is a <b>custom</b> confirmation modal. (test: value)</div>');

  /* Test confirmation inline (confirmation_type=inline) */
  $webform_confirmation_inline = Webform::load('test_confirmation_inline');

  // Check confirmation inline.
  $this
    ->drupalPostForm('/webform/test_confirmation_inline', [], 'Submit');
  $this
    ->assertRaw('<a href="' . $webform_confirmation_inline
    ->toUrl('canonical', [
    'absolute' => TRUE,
  ])
    ->toString() . '" rel="prev">Back to form</a>');
  $this
    ->assertUrl('webform/test_confirmation_inline');

  // Check confirmation inline with custom query parameters.
  $this
    ->drupalPostForm('/webform/test_confirmation_inline', [], 'Submit', [
    'query' => [
      'custom' => 'param',
    ],
  ]);
  $this
    ->assertRaw('<a href="' . $webform_confirmation_inline
    ->toUrl('canonical', [
    'absolute' => TRUE,
    'query' => [
      'custom' => 'param',
    ],
  ])
    ->toString() . '" rel="prev">Back to form</a>');
  $this
    ->assertUrl('webform/test_confirmation_inline', [
    'query' => [
      'custom' => 'param',
    ],
  ]);

  /* Test confirmation page (confirmation_type=page) */
  $webform_confirmation_page = Webform::load('test_confirmation_page');

  // Check confirmation page.
  $sid = $this
    ->postSubmission($webform_confirmation_page);
  $webform_submission = WebformSubmission::load($sid);
  $this
    ->assertRaw('This is a custom confirmation page.');
  $this
    ->assertRaw('<a href="' . $webform_confirmation_page
    ->toUrl('canonical', [
    'absolute' => TRUE,
  ])
    ->toString() . '" rel="prev">Back to form</a>');
  $this
    ->assertUrl('webform/test_confirmation_page/confirmation', [
    'query' => [
      'token' => $webform_submission
        ->getToken(),
    ],
  ]);

  // Check that the confirmation page's 'Back to form 'link includes custom
  // query parameters.
  $this
    ->drupalGet('/webform/test_confirmation_page/confirmation', [
    'query' => [
      'custom' => 'param',
    ],
  ]);

  // Check confirmation page with custom query parameters.
  $sid = $this
    ->postSubmission($webform_confirmation_page, [], NULL, [
    'query' => [
      'custom' => 'param',
    ],
  ]);
  $webform_submission = WebformSubmission::load($sid);
  $this
    ->assertUrl('webform/test_confirmation_page/confirmation', [
    'query' => [
      'custom' => 'param',
      'token' => $webform_submission
        ->getToken(),
    ],
  ]);

  // Check confirmation page with token excluded.
  $webform_confirmation_page
    ->setSetting('confirmation_exclude_token', TRUE);
  $webform_confirmation_page
    ->save();
  $this
    ->postSubmission($webform_confirmation_page, [], NULL, [
    'query' => [
      'custom' => 'param',
    ],
  ]);
  $this
    ->assertUrl('webform/test_confirmation_page/confirmation', [
    'query' => [
      'custom' => 'param',
    ],
  ]);

  // Check confirmation page with token and query excluded.
  $webform_confirmation_page
    ->setSetting('confirmation_exclude_query', TRUE);
  $webform_confirmation_page
    ->save();
  $this
    ->postSubmission($webform_confirmation_page);
  $this
    ->assertUrl('webform/test_confirmation_page/confirmation');

  // TODO: (TESTING) Figure out why the inline confirmation link is not including the query string parameters.
  // $this->assertRaw('<a href="' . $webform_confirmation_page->toUrl()->toString() . '?custom=param">Back to form</a>');.

  /* Test confirmation page custom (confirmation_type=page) */
  $webform_confirmation_page_custom = Webform::load('test_confirmation_page_custom');

  // Check custom confirmation page.
  $this
    ->postSubmission($webform_confirmation_page_custom);
  $this
    ->assertRaw('<h1>Custom confirmation page title</h1>');
  $this
    ->assertRaw('<div style="border: 10px solid red; padding: 1em;" class="webform-confirmation">');
  $this
    ->assertRaw('<a href="' . $webform_confirmation_page_custom
    ->toUrl()
    ->setAbsolute()
    ->toString() . '" rel="prev" class="button">Custom back to link</a>');

  // Check back link is hidden.
  $webform_confirmation_page_custom
    ->setSetting('confirmation_back', FALSE);
  $webform_confirmation_page_custom
    ->save();
  $this
    ->postSubmission($webform_confirmation_page_custom);
  $this
    ->assertNoRaw('<a href="' . $webform_confirmation_page_custom
    ->toUrl()
    ->toString() . '" rel="prev" class="button">Custom back to link</a>');

  /* Test confirmation URL (confirmation_type=url) */
  $webform_confirmation_url = Webform::load('test_confirmation_url');

  // Check confirmation URL.
  $this
    ->postSubmission($webform_confirmation_url);
  $this
    ->assertNoRaw('<h2 class="visually-hidden">Status message</h2>');
  $this
    ->assertUrl('/');

  // Check confirmation URL using an internal: URI.
  $webform_confirmation_url
    ->setSetting('confirmation_url', 'internal:/some-internal-path')
    ->save();
  $this
    ->postSubmission($webform_confirmation_url);
  $this
    ->assertUrl('/some-internal-path');

  /* Test confirmation URL (confirmation_type=url_message) */
  $webform_confirmation_url_message = Webform::load('test_confirmation_url_message');

  // Check confirmation URL.
  $this
    ->postSubmission($webform_confirmation_url_message);
  $this
    ->assertRaw('<h2 class="visually-hidden">Status message</h2>');
  $this
    ->assertRaw('This is a custom confirmation message.');
  $this
    ->assertUrl('/');

  /* Test confirmation none (confirmation_type=none) */
  $this
    ->drupalLogout();
  $webform_confirmation_url_message = Webform::load('test_confirmation_none');

  // Check no confirmation message.
  $this
    ->postSubmission($webform_confirmation_url_message);
  $this
    ->assertNoRaw('<h2 class="visually-hidden">Status message</h2>');
}