You are here

public function WebformSettingsPrepopulateTest::testPrepopulate in Webform 8.5

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

Tests webform setting including confirmation.

File

tests/src/Functional/Settings/WebformSettingsPrepopulateTest.php, line 42

Class

WebformSettingsPrepopulateTest
Tests for webform prepopulate settings.

Namespace

Drupal\Tests\webform\Functional\Settings

Code

public function testPrepopulate() {

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

  /* Test webform prepopulate (form_prepopulate) */

  /**************************************************************************/
  $webform_prepopulate = Webform::load('test_form_prepopulate');

  // Check prepopulation of an element.
  $this
    ->drupalGet('/webform/test_form_prepopulate', [
    'query' => [
      'name' => 'John',
      'colors' => [
        'red',
        'white',
      ],
    ],
  ]);
  $this
    ->assertFieldByName('name', 'John');
  $this
    ->assertFieldChecked('edit-colors-red');
  $this
    ->assertFieldChecked('edit-colors-white');
  $this
    ->assertNoFieldChecked('edit-colors-blue');
  $this
    ->drupalGet('/webform/test_form_prepopulate', [
    'query' => [
      'name' => 'John',
      'colors' => 'red',
    ],
  ]);
  $this
    ->assertFieldByName('name', 'John');
  $this
    ->assertFieldChecked('edit-colors-red');
  $this
    ->assertNoFieldChecked('edit-colors-white');
  $this
    ->assertNoFieldChecked('edit-colors-blue');

  // Check disabling prepopulation of an element.
  $webform_prepopulate
    ->setSetting('form_prepopulate', FALSE);
  $webform_prepopulate
    ->save();
  $this
    ->drupalGet('/webform/test_form_prepopulate', [
    'query' => [
      'name' => 'John',
    ],
  ]);
  $this
    ->assertFieldByName('name', '');

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

  /* Test webform prepopulate source entity (form_prepopulate_source_entity) */

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

  // Check prepopulating source entity.
  $this
    ->drupalPostForm('/webform/test_form_prepopulate', [], 'Submit', [
    'query' => [
      'source_entity_type' => 'webform',
      'source_entity_id' => 'contact',
    ],
  ]);
  $sid = $this
    ->getLastSubmissionId($webform_prepopulate);
  $webform_submission = WebformSubmission::load($sid);
  $this
    ->assertNotNull($webform_submission
    ->getSourceEntity());
  if ($webform_submission
    ->getSourceEntity()) {
    $this
      ->assertEqual($webform_submission
      ->getSourceEntity()
      ->getEntityTypeId(), 'webform');
    $this
      ->assertEqual($webform_submission
      ->getSourceEntity()
      ->id(), 'contact');
  }

  // Check disabling prepopulation source entity.
  $webform_prepopulate
    ->setSetting('form_prepopulate_source_entity', FALSE);
  $webform_prepopulate
    ->save();
  $this
    ->drupalPostForm('/webform/test_form_prepopulate', [], 'Submit', [
    'query' => [
      'source_entity_type' => 'webform',
      'source_entity_id' => 'contact',
    ],
  ]);
  $sid = $this
    ->getLastSubmissionId($webform_prepopulate);
  $webform_submission = WebformSubmission::load($sid);
  $this
    ->assertNull($webform_submission
    ->getSourceEntity());

  // Set prepopulated source entity required.
  $webform_prepopulate
    ->setSetting('form_prepopulate_source_entity', TRUE);
  $webform_prepopulate
    ->setSetting('form_prepopulate_source_entity_required', TRUE);
  $webform_prepopulate
    ->save();

  // Check required prepopulated source entity displays error when no source
  // entity is defined.
  $this
    ->drupalGet('/webform/test_form_prepopulate');
  $this
    ->assertRaw('This webform is not available. Please contact the site administrator.');

  // Check required prepopulated source entity displays error when invalid
  // source entity is defined.
  $this
    ->drupalGet('/webform/test_form_prepopulate', [
    'query' => [
      'source_entity_type' => 'webform',
      'source_entity_id' => 'DOES_NOT_EXIST',
    ],
  ]);
  $this
    ->assertRaw('This webform is not available. Please contact the site administrator.');

  // Check required prepopulated source entity loads when source entity is
  // valid.
  $this
    ->drupalGet('/webform/test_form_prepopulate', [
    'query' => [
      'source_entity_type' => 'webform',
      'source_entity_id' => 'contact',
    ],
  ]);
  $this
    ->assertNoRaw('This webform is not available. Please contact the site administrator.');

  // Check that required prepopulated source entity can be updated (edit).
  $this
    ->drupalLogin($this->rootUser);
  $sid = $this
    ->postSubmission($webform_prepopulate, [], 'Submit', [
    'query' => [
      'source_entity_type' => 'webform',
      'source_entity_id' => 'contact',
    ],
  ]);
  $this
    ->drupalGet("/admin/structure/webform/manage/test_form_prepopulate/submission/{$sid}/edit");
  $this
    ->assertNoRaw('This webform is not available. Please contact the site administrator.');
  $this
    ->drupalLogout();

  // Set prepopulated source entity type to user.
  $webform_prepopulate
    ->setSetting('form_prepopulate_source_entity_type', 'user');
  $webform_prepopulate
    ->save();

  // Check invalid source entity type displays error.
  $this
    ->drupalGet('/webform/test_form_prepopulate', [
    'query' => [
      'source_entity_type' => 'webform',
      'source_entity_id' => 'contact',
    ],
  ]);
  $this
    ->assertRaw('This webform is not available. Please contact the site administrator.');

  // Set prepopulated source entity type to webform.
  $webform_prepopulate
    ->setSetting('form_prepopulate_source_entity_type', 'webform');
  $webform_prepopulate
    ->save();

  // Check invalid source entity type displays error.
  $this
    ->drupalGet('/webform/test_form_prepopulate', [
    'query' => [
      'source_entity_type' => 'webform',
      'source_entity_id' => 'contact',
    ],
  ]);
  $this
    ->assertNoRaw('This webform is not available. Please contact the site administrator.');

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

  /* Test webform_menu_local_tasks_alter() */

  /**************************************************************************/
  $this
    ->drupalLogin($this->rootUser);

  // Check query string parameters to be transfered from canonical to test.
  // @see webform_menu_local_tasks_alter
  $route_options = [
    'query' => [
      'source_entity_type' => 'webform',
      'source_entity_id' => 'contact',
    ],
  ];
  $this
    ->drupalGet('/webform/test_form_prepopulate', $route_options);
  $this
    ->assertLinkByHref($webform_prepopulate
    ->toUrl('canonical', $route_options)
    ->toString());
}