You are here

public function WebformVariantElementTest::testVariantElement in Webform 8.5

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

Test variant element.

File

tests/src/Functional/Variant/WebformVariantElementTest.php, line 40

Class

WebformVariantElementTest
Tests for the webform variant element.

Namespace

Drupal\Tests\webform\Functional\Variant

Code

public function testVariantElement() {
  $variant_user = $this
    ->drupalCreateUser([
    'administer webform',
    'edit webform variants',
  ]);
  $admin_user = $this
    ->drupalCreateUser([
    'administer webform',
  ]);

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

  // Check that the variant element is visible to users with
  // 'edit webform variants' permission.
  $this
    ->drupalLogin($variant_user);
  $this
    ->drupalGet('/admin/structure/webform/manage/contact/element/add');
  $this
    ->assertLink('Variant');

  // Check that the variant element is hidden to users without
  // 'edit webform variants' permission.
  $this
    ->drupalLogin($admin_user);
  $this
    ->drupalGet('/admin/structure/webform/manage/contact/element/add');
  $this
    ->assertNoLink('Variant');

  // Check that hidden variant element is still available.
  $this
    ->drupalGet('/admin/structure/webform/manage/contact/element/add/webform_variant');
  $this
    ->assertResponse(200);

  // Check that only the override variant plugins is available to all webforms.
  $this
    ->drupalGet('/admin/structure/webform/manage/contact/element/add/webform_variant');
  $this
    ->assertRaw('<option value="override">Override</option>');
  $this
    ->assertNoRaw('<option value="test">Test</option>');

  // Check that only the test variant plugins is available to test_variant_*.
  // @see \Drupal\webform_test_variant\Plugin\WebformVariant\TestWebformVariant::isApplicable
  $this
    ->drupalGet('/admin/structure/webform/manage/test_variant_multiple/element/add/webform_variant');
  $this
    ->assertRaw('<option value="override">Override</option>');
  $this
    ->assertRaw('<option value="test">Test</option>');

  // Login as variant user to display 'Variants' tab info messages.
  $this
    ->drupalLogin($variant_user);

  // Check 'Variants' tab message is displayed.
  $this
    ->drupalGet('/admin/structure/webform/manage/contact/element/add/webform_variant');
  $this
    ->assertRaw("After clicking 'Save', the 'Variants' manage tab will be displayed. Use the 'Variants' manage tab to add and remove variants.");
  $this
    ->assertNoText('Add and remove variants using the Variants manage tab.');

  // Check that 'Variants' tab is not visible.
  $this
    ->drupalGet('/admin/structure/webform/manage/contact');
  $this
    ->assertNoLink('Variants');

  // Add a variant element to contact form.
  $edit = [
    'key' => 'variant',
    'properties[title]' => '{variant_title}',
    'properties[variant]' => 'override',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/contact/element/add/webform_variant', $edit, 'Save');

  // Check that the 'Variants' tab is visible.
  $this
    ->drupalGet('/admin/structure/webform/manage/contact');
  $this
    ->assertLink('Variants');

  // Check that the 'Variants' tab message is displayed.
  $this
    ->drupalGet('/admin/structure/webform/manage/contact/element/add/webform_variant');
  $this
    ->assertNoRaw("After clicking 'Save', the 'Variants' manage tab will be displayed. Use the 'Variants' manage tab to add and remove variants.");
  $this
    ->assertText('Add and remove variants using the Variants manage tab.');

  // Check that users missing the 'edit webform variants' permission
  // don't see any messages.
  $this
    ->drupalLogin($admin_user);
  $this
    ->drupalGet('/admin/structure/webform/manage/contact/element/add/webform_variant');
  $this
    ->assertNoText('Add and remove variants using the Variants manage tab.');

  // Check that the 'Variants' tab is also not visible.
  $this
    ->drupalGet('/admin/structure/webform/manage/contact');
  $this
    ->assertNoLink('Variants');

  // Check that the 'Variant type' can not be changed once variants have created.
  $this
    ->drupalGet('/admin/structure/webform/manage/test_variant_multiple/element/letter/edit');
  $this
    ->assertNoRaw('<option value="override">Override</option>');
  $this
    ->assertRaw('Override');
  $this
    ->assertRaw('This variant is currently in-use. The variant type cannot be changed.');

  // Check that the letter element has 2 related variants.
  $webform = Webform::load('test_variant_multiple');
  $this
    ->assertEqual(2, $webform
    ->getVariants(NULL, NULL, 'letter')
    ->count());

  // Delete the letter element and its related variants.
  $webform
    ->deleteElement('letter');
  $webform
    ->save();

  // Check that letter element now has 0 related variants.
  $this
    ->assertEqual(0, $webform
    ->getVariants(NULL, NULL, 'letter')
    ->count());
}