You are here

public function WebformThirdPartySettingsTest::testThirdPartySettings in Webform 8.5

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

Tests webform third party settings.

File

tests/src/Functional/WebformThirdPartySettingsTest.php, line 24

Class

WebformThirdPartySettingsTest
Tests for webform third party settings.

Namespace

Drupal\Tests\webform\Functional

Code

public function testThirdPartySettings() {
  $webform = Webform::load('contact');
  $this
    ->drupalLogin($this->rootUser);

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

  // Check honeypot (custom) third party setting does not exist.
  $this
    ->assertNull($webform
    ->getThirdPartySetting('honeypot', 'honeypot'));

  // Add honeypot (custom) third party setting, even though the honeypot
  // module is not installed.
  $webform = $this
    ->reloadWebform('contact');
  $webform
    ->setThirdPartySetting('honeypot', 'honeypot', TRUE);
  $webform
    ->save();

  // Check honeypot (custom) third party setting.
  $webform = $this
    ->reloadWebform('contact');
  $this
    ->assertTrue($webform
    ->getThirdPartySetting('honeypot', 'honeypot'));

  // Check 'Webform: Settings' shows no modules installed.
  $this
    ->drupalGet('/admin/structure/webform/config');
  $this
    ->assertRaw('There are no third party settings available.');

  // Check 'Contact: Settings' does not show 'Third party settings'.
  $this
    ->drupalGet('/admin/structure/webform/manage/contact/settings');
  $this
    ->assertNoRaw('Third party settings');

  // Install test third party settings module.
  $this
    ->drupalPostForm('admin/modules', [
    'modules[webform_test_third_party_settings][enable]' => TRUE,
  ], 'Install');

  // Check 'Webform: Settings' shows no modules installed.
  $this
    ->drupalGet('/admin/structure/webform/config');
  $this
    ->assertNoRaw('There are no third party settings available.');

  // Check 'Contact: Settings' shows 'Third party settings'.
  $this
    ->drupalGet('/admin/structure/webform/manage/contact/settings');
  $this
    ->assertRaw('Third party settings');

  // Check 'Webform: Settings' message.
  $edit = [
    'third_party_settings[webform_test_third_party_settings][message]' => 'Message for all webforms',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/config', $edit, 'Save configuration');
  $this
    ->drupalGet('/webform/contact');
  $this
    ->assertRaw('Message for all webforms');

  // Check that webform.settings.yml contain message.
  $this
    ->assertEqual('Message for all webforms', $this
    ->config('webform.settings')
    ->get('third_party_settings.webform_test_third_party_settings.message'));

  // Check 'Contact: Settings: Third party' message.
  $edit = [
    'third_party_settings[webform_test_third_party_settings][message]' => 'Message for only this webform',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/contact/settings', $edit, 'Save');
  $this
    ->drupalGet('/webform/contact');
  $this
    ->assertRaw('Message for only this webform');

  // Check honeypot (custom) third party setting still exists.
  $webform = $this
    ->reloadWebform('contact');
  $this
    ->assertTrue($webform
    ->getThirdPartySetting('honeypot', 'honeypot'));

  // Check 'Check 'Contact: Settings: Third party' is not null.
  $this
    ->assertNotNull($this
    ->config('webform.webform.contact')
    ->get('third_party_settings.webform_test_third_party_settings'));

  // Check clearing 'Check 'Contact: Settings: Third party' message
  // sets the value to null.
  $edit = [
    'third_party_settings[webform_test_third_party_settings][message]' => '',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/contact/settings', $edit, 'Save');
  $webform = $this
    ->reloadWebform('contact');
  $this
    ->assertEqual([], $webform
    ->getThirdPartySettings('webform_test_third_party_settings'));
  $this
    ->assertNull($this
    ->config('webform.webform.contact')
    ->get('third_party_settings.webform_test_third_party_settings'));

  // Uninstall test third party settings module.
  $this
    ->drupalPostForm('admin/modules/uninstall', [
    'uninstall[webform_test_third_party_settings]' => TRUE,
  ], 'Uninstall');
  $this
    ->drupalPostForm(NULL, [], 'Uninstall');

  // Check webform.
  $this
    ->drupalGet('/webform/contact');
  $this
    ->assertNoRaw('Message for only this webform');

  // Check that webform.settings.yml no longer contains message or
  // webform_test_third_party_settings.
  $this
    ->assertNull($this
    ->config('webform.settings')
    ->get('third_party_settings.webform_test_third_party_settings.message'));
  $this
    ->assertNull($this
    ->config('webform.settings')
    ->get('third_party_settings.webform_test_third_party_settings'));
}