You are here

public function WebformVariantApplyTest::testVariantApply in Webform 8.5

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

Test variant apply.

File

tests/src/Functional/Variant/WebformVariantApplyTest.php, line 27

Class

WebformVariantApplyTest
Tests for the webform variant apply.

Namespace

Drupal\Tests\webform\Functional\Variant

Code

public function testVariantApply() {
  $webform = $this
    ->loadWebform('test_variant_randomize');
  $this
    ->drupalLogin($this->rootUser);

  // Check apply single variant page title.
  $this
    ->drupalGet('/admin/structure/webform/manage/test_variant_randomize/variants/apply');
  $this
    ->assertRaw('Apply variant to the <em class="placeholder">Test: Variant randomize</em> webform?');

  // Check apply multiple variants page title.
  $this
    ->drupalGet('/admin/structure/webform/manage/test_variant_multiple/variants/apply');
  $this
    ->assertRaw('>Apply the selected variants to the <em class="placeholder">Test: Variant multiple</em> webform?');

  // Check that no variant has not been applied.
  $this
    ->assertEqual(2, $webform
    ->getVariants()
    ->count());
  $this
    ->drupalGet('/webform/test_variant_randomize');
  $this
    ->assertRaw('{X}');
  $this
    ->drupalGet('/webform/test_variant_randomize', [
    'query' => [
      'letter' => 'a',
    ],
  ]);
  $this
    ->assertNoRaw('{X}');
  $this
    ->assertRaw('[A]');

  // Check access denied error when trying to apply non-existent variant.
  $this
    ->drupalGet('/admin/structure/webform/manage/test_variant_randomize/variants/apply', [
    'query' => [
      'variant_id' => 'c',
    ],
  ]);
  $this
    ->assertResponse(403);

  // Check access allowed when trying to apply existing 'a' variant.
  $this
    ->drupalGet('/admin/structure/webform/manage/test_variant_randomize/variants/apply', [
    'query' => [
      'variant_id' => 'a',
    ],
  ]);
  $this
    ->assertResponse(200);

  // Check variant select menu is not visible when variant is specified.
  $this
    ->drupalGet('/admin/structure/webform/manage/test_variant_randomize/variants/apply', [
    'query' => [
      'variant_id' => 'a',
    ],
  ]);
  $this
    ->assertElementNotPresent('#edit-variants-letter');

  // Check variant select menu is visible when no variant is specified.
  $this
    ->drupalGet('/admin/structure/webform/manage/test_variant_randomize/variants/apply');
  $this
    ->assertElementPresent('#edit-variants-letter');

  // Apply 'a' variant.
  $edit = [
    'delete' => 'none',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/test_variant_randomize/variants/apply', $edit, 'Apply', [
    'query' => [
      'variant_id' => 'a',
    ],
  ]);
  $webform = $this
    ->reloadWebform('test_variant_randomize');

  // Check that the 'a' variant has been applied and no variants have been deleted.
  $this
    ->drupalGet('/webform/test_variant_randomize');
  $this
    ->assertNoRaw('{X}');
  $this
    ->assertRaw('[A]');
  $this
    ->assertTrue($webform
    ->getVariants()
    ->has('a'));
  $this
    ->assertEqual(2, $webform
    ->getVariants()
    ->count());

  // Disable the 'b' variant.
  $variant = $webform
    ->getVariant('b');
  $variant
    ->disable();
  $webform
    ->save();

  // Apply the 'b' variant which is disabled.
  $edit = [
    'delete' => 'none',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/test_variant_randomize/variants/apply', $edit, 'Apply', [
    'query' => [
      'variant_id' => 'b',
    ],
  ]);
  $webform = $this
    ->reloadWebform('test_variant_randomize');
  $this
    ->assertNoRaw('{X}');
  $this
    ->assertRaw('[B]');
  $this
    ->assertTrue($webform
    ->getVariants()
    ->has('b'));
  $this
    ->assertEqual(2, $webform
    ->getVariants()
    ->count());

  // Apply and delete the 'a' variant.
  $edit = [
    'delete' => 'selected',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/test_variant_randomize/variants/apply', $edit, 'Apply', [
    'query' => [
      'variant_id' => 'a',
    ],
  ]);
  $webform = $this
    ->reloadWebform('test_variant_randomize');

  // Check that the 'a' variant has been applied and no variants have been deleted.
  $this
    ->drupalGet('/webform/test_variant_randomize');
  $this
    ->assertNoRaw('{X}');
  $this
    ->assertRaw('[A]');
  $this
    ->assertFalse($webform
    ->getVariants()
    ->has('a'));
  $this
    ->assertEqual(1, $webform
    ->getVariants()
    ->count());

  // Apply the 'b' variant and delete all variants.
  $edit = [
    'delete' => 'all',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/test_variant_randomize/variants/apply', $edit, 'Apply', [
    'query' => [
      'variant_id' => 'b',
    ],
  ]);
  $webform = $this
    ->reloadWebform('test_variant_randomize');

  // Check that the 'b' variant has been applied and all variants have been deleted.
  $this
    ->drupalGet('/webform/test_variant_randomize');
  $this
    ->assertNoRaw('{X}');
  $this
    ->assertRaw('[B]');
  $this
    ->assertFalse($webform
    ->getVariants()
    ->has('b'));
  $this
    ->assertEqual(0, $webform
    ->getVariants()
    ->count());
}