You are here

public function WebformSettingsLimitUniqueTest::testLimitUnique in Webform 8.5

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

Tests webform submission form unique limit.

File

tests/src/Functional/Settings/WebformSettingsLimitUniqueTest.php, line 35

Class

WebformSettingsLimitUniqueTest
Tests for webform submission form unique limit.

Namespace

Drupal\Tests\webform\Functional\Settings

Code

public function testLimitUnique() {
  $webform_total_unique = Webform::load('test_form_limit_total_unique');
  $webform_user_unique = Webform::load('test_form_limit_user_unique');
  $user = $this
    ->drupalCreateUser();
  $admin_user = $this
    ->drupalCreateUser([
    'administer webform',
  ]);
  $manage_any_user = $this
    ->drupalCreateUser([
    'view any webform submission',
    'edit any webform submission',
  ]);
  $edit_any_user = $this
    ->drupalCreateUser([
    'edit any webform submission',
  ]);
  $manage_own_user = $this
    ->drupalCreateUser([
    'view own webform submission',
    'edit own webform submission',
  ]);
  $edit_user_only = $this
    ->drupalCreateUser([
    'edit own webform submission',
  ]);

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

  // Total unique. (webform)

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

  // Check that access is denied for anonymous users.
  $this
    ->drupalGet('/webform/test_form_limit_total_unique');
  $this
    ->assertResponse(403);
  $this
    ->assertNoFieldByName('name', '');

  // Check that access is allowed for edit any submission user.
  $this
    ->drupalLogin($manage_any_user);
  $this
    ->drupalGet('/webform/test_form_limit_total_unique');
  $this
    ->assertResponse(200);
  $this
    ->assertFieldByName('name', '');

  // Check that name is empty for new submission for admin user.
  $this
    ->drupalLogin($admin_user);
  $this
    ->drupalGet('/webform/test_form_limit_total_unique');
  $this
    ->assertFieldByName('name', '');

  // Check that 'Test' form is available and display a message.
  $this
    ->drupalGet('/webform/test_form_limit_total_unique/test');
  $this
    ->assertRaw(' The below webform has been prepopulated with custom/random test data. When submitted, this information <strong>will still be saved</strong> and/or <strong>sent to designated recipients</strong>');

  // Check that name is empty for new submission for root user.
  $this
    ->drupalLogin($this->rootUser);
  $this
    ->drupalGet('/webform/test_form_limit_total_unique');
  $this
    ->assertFieldByName('name', '');

  // Check that name is set to 'John Smith' and 'Submission information' is
  // visible for admin user.
  $this
    ->drupalLogin($admin_user);
  $sid = $this
    ->postSubmission($webform_total_unique, [
    'name' => 'John Smith',
  ]);
  $this
    ->drupalGet('/webform/test_form_limit_total_unique');
  $this
    ->assertFieldByName('name', 'John Smith');
  $this
    ->assertRaw("<div><b>Submission ID:</b> {$sid}</div>");

  // Check that name is set to 'John Smith' and 'Submission information' is
  // visible for root user.
  $this
    ->drupalGet('/webform/test_form_limit_total_unique');
  $this
    ->assertFieldByName('name', 'John Smith');
  $this
    ->assertRaw("<div><b>Submission ID:</b> {$sid}</div>");

  // Check that 'Test' form also has name set to 'John Smith'
  // and does not display a message.
  $this
    ->drupalGet('/webform/test_form_limit_total_unique/test');
  $this
    ->assertFieldByName('name', 'John Smith');
  $this
    ->assertRaw("<div><b>Submission ID:</b> {$sid}</div>");
  $this
    ->assertNoRaw(' The below webform has been prepopulated with custom/random test data. When submitted, this information <strong>will still be saved</strong> and/or <strong>sent to designated recipients</strong>');

  // Check that edit any submission user can access and edit.
  $this
    ->drupalLogin($manage_any_user);
  $this
    ->drupalGet('/webform/test_form_limit_total_unique');
  $this
    ->assertFieldByName('name', 'John Smith');
  $this
    ->assertRaw("<div><b>Submission ID:</b> {$sid}</div>");

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

  // Total unique. (node)

  /**************************************************************************/
  $this
    ->drupalLogout();

  // Create webform node.
  $node_total_unique = $this
    ->createWebformNode('test_form_limit_total_unique');

  // Check that access is denied for anonymous users.
  $this
    ->drupalGet('/webform/test_form_limit_total_unique');
  $this
    ->assertResponse(403);
  $this
    ->assertNoFieldByName('name', '');
  $this
    ->drupalGet('/node/' . $node_total_unique
    ->id());
  $this
    ->assertResponse(403);

  // Check that access is denied for authenticated user.
  $this
    ->drupalLogin($user);
  $this
    ->drupalGet('/webform/test_form_limit_total_unique');
  $this
    ->assertResponse(403);
  $this
    ->assertNoFieldByName('name', '');
  $this
    ->drupalGet('/node/' . $node_total_unique
    ->id());
  $this
    ->assertResponse(403);

  // Check that access is allowed for edit any submission user.
  $this
    ->drupalLogin($manage_any_user);
  $this
    ->drupalGet('/node/' . $node_total_unique
    ->id());
  $this
    ->assertResponse(200);
  $this
    ->assertFieldByName('name', '');

  // Check that name is empty for new submission for admin user.
  $this
    ->drupalLogin($admin_user);
  $this
    ->drupalGet('/node/' . $node_total_unique
    ->id());
  $this
    ->assertFieldByName('name', '');

  // Check that name is set to 'John Lennon' and 'Submission information' is
  // visible for admin user.
  $sid = $this
    ->postNodeSubmission($node_total_unique, [
    'name' => 'John Lennon',
  ]);
  $this
    ->drupalGet('/webform/test_form_limit_total_unique');
  $this
    ->assertFieldByName('name', 'John Lennon');
  $this
    ->assertRaw("<div><b>Submission ID:</b> {$sid}</div>");

  // Check that 'Test' form also has name set to 'John Lennon'
  // and does not display a message.
  $this
    ->drupalGet('/node/' . $node_total_unique
    ->id() . '/webform/test');
  $this
    ->assertFieldByName('name', 'John Lennon');
  $this
    ->assertRaw("<div><b>Submission ID:</b> {$sid}</div>");

  // Check that 'Test' form also has name set to 'John Lennon'
  // and does not display a message for root user.
  $this
    ->drupalLogin($this->rootUser);
  $this
    ->drupalGet('/node/' . $node_total_unique
    ->id() . '/webform/test');
  $this
    ->assertFieldByName('name', 'John Lennon');
  $this
    ->assertRaw("<div><b>Submission ID:</b> {$sid}</div>");

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

  // User unique. (webform)

  /**************************************************************************/
  $this
    ->drupalLogout();

  // Check that access is denied for anonymous users.
  $this
    ->drupalGet('/webform/test_form_limit_user_unique');
  $this
    ->assertResponse(403);

  // Check that access is denied for authenticated user.
  $this
    ->drupalLogin($user);
  $this
    ->drupalGet('/webform/test_form_limit_user_unique');
  $this
    ->assertResponse(403);

  // Check that access is denied for edit any user.
  $this
    ->drupalLogin($edit_any_user);
  $this
    ->drupalGet('/webform/test_form_limit_user_unique');
  $this
    ->assertResponse(403);

  // Check that access is denied for edit own user.
  $this
    ->drupalLogin($edit_user_only);
  $this
    ->drupalGet('/webform/test_form_limit_user_unique');
  $this
    ->assertResponse(403);

  // Check that access is allowed for edit own submission user.
  $this
    ->drupalLogin($manage_own_user);
  $this
    ->drupalGet('/webform/test_form_limit_user_unique');
  $this
    ->assertFieldByName('name', '');

  // Check that name is empty for new submission for admin user.
  $this
    ->drupalLogin($admin_user);
  $this
    ->drupalGet('/webform/test_form_limit_user_unique');
  $this
    ->assertFieldByName('name', '');

  // Check that 'Test' form is available and display a message.
  $this
    ->drupalGet('/webform/test_form_limit_user_unique/test');
  $this
    ->assertRaw(' The below webform has been prepopulated with custom/random test data. When submitted, this information <strong>will still be saved</strong> and/or <strong>sent to designated recipients</strong>');

  // Check that name is empty for new submission for root user.
  $this
    ->drupalLogin($this->rootUser);
  $this
    ->drupalGet('/webform/test_form_limit_user_unique');
  $this
    ->assertFieldByName('name', '');

  // Check that name is set to 'John Smith' and 'Submission information' is
  // visible for admin user.
  $this
    ->drupalLogin($admin_user);
  $sid = $this
    ->postSubmission($webform_user_unique, [
    'name' => 'John Smith',
  ]);
  $this
    ->drupalGet('/webform/test_form_limit_user_unique');
  $this
    ->assertFieldByName('name', 'John Smith');
  $this
    ->assertRaw("<div><b>Submission ID:</b> {$sid}</div>");

  // Check that 'Test' form also has name set to 'John Smith'
  // and does not display a message.
  $this
    ->drupalGet('/webform/test_form_limit_user_unique/test');
  $this
    ->assertFieldByName('name', 'John Smith');
  $this
    ->assertRaw("<div><b>Submission ID:</b> {$sid}</div>");

  // Check that access is allowed for edit own submission user.
  $this
    ->drupalLogin($manage_own_user);
  $this
    ->drupalGet('/webform/test_form_limit_user_unique');
  $this
    ->assertFieldByName('name', '');

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

  // Check that name is still empty for new submission for root user.
  $this
    ->drupalLogin($this->rootUser);
  $this
    ->drupalGet('/webform/test_form_limit_user_unique');
  $this
    ->assertFieldByName('name', '');

  // Check that name is set to 'John Smith' and 'Submission information' is
  // visible for root user.
  $sid = $this
    ->postSubmission($webform_user_unique, [
    'name' => 'Jane Doe',
  ]);
  $this
    ->drupalGet('/webform/test_form_limit_user_unique');
  $this
    ->assertFieldByName('name', 'Jane Doe');
  $this
    ->assertRaw("<div><b>Submission ID:</b> {$sid}</div>");

  // Check that the delete submission link includes ?destination.
  $this
    ->assertLinkByHref(base_path() . 'webform/test_form_limit_user_unique/submissions/' . $sid . '/delete?destination=' . base_path() . 'form/test-form-limit-user-unique');

  // Check that 'Test' form also has name set to 'Jane Doe'
  // and does not display a message.
  $this
    ->drupalGet('/webform/test_form_limit_user_unique/test');
  $this
    ->assertFieldByName('name', 'Jane Doe');
  $this
    ->assertRaw("<div><b>Submission ID:</b> {$sid}</div>");

  // Check that the delete submission link does not include the ?destination.
  $this
    ->assertLinkByHref(base_path() . 'admin/structure/webform/manage/test_form_limit_user_unique/submission/' . $sid . '/delete');
}