You are here

public function WebformSubmissionStorageTest::testSubmissionStorage in Webform 8.5

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

Test webform submission storage.

File

tests/src/Functional/WebformSubmissionStorageTest.php, line 20

Class

WebformSubmissionStorageTest
Tests for webform storage tests.

Namespace

Drupal\Tests\webform\Functional

Code

public function testSubmissionStorage() {

  /** @var \Drupal\webform\WebformSubmissionStorageInterface $storage */
  $storage = \Drupal::entityTypeManager()
    ->getStorage('webform_submission');

  // Create new webform.
  $id = $this
    ->randomMachineName(8);
  $webform = Webform::create([
    'langcode' => 'en',
    'status' => WebformInterface::STATUS_OPEN,
    'id' => $id,
    'title' => $id,
    'elements' => Yaml::encode([
      'test' => [
        '#markup' => 'test',
      ],
    ]),
  ]);
  $webform
    ->save();

  // Create 3 submissions for user1.
  $user1 = $this
    ->drupalCreateUser([
    'view own webform submission',
  ]);
  $this
    ->drupalLogin($user1);
  $user1_submissions = [
    WebformSubmission::load($this
      ->postSubmission($webform)),
    WebformSubmission::load($this
      ->postSubmission($webform)),
    WebformSubmission::load($this
      ->postSubmission($webform)),
  ];

  // Create 3 submissions for user2.
  $user2 = $this
    ->drupalCreateUser();
  $this
    ->drupalLogin($user2);
  $user2_submissions = [
    WebformSubmission::load($this
      ->postSubmission($webform)),
    WebformSubmission::load($this
      ->postSubmission($webform)),
    WebformSubmission::load($this
      ->postSubmission($webform)),
  ];

  // Create admin user who can see all submissions.
  $admin_user = $this
    ->drupalCreateUser([
    'administer webform',
  ]);

  // Check total.
  $this
    ->assertEqual($storage
    ->getTotal($webform), 6);
  $this
    ->assertEqual($storage
    ->getTotal($webform, NULL, $user1), 3);
  $this
    ->assertEqual($storage
    ->getTotal($webform, NULL, $user2), 3);

  // Check next submission.
  $this
    ->drupalLogin($user1);
  $this
    ->assertEqual($storage
    ->getNextSubmission($user1_submissions[0], NULL, $user1)
    ->id(), $user1_submissions[1]
    ->id(), "User 1 can navigate forward to user 1's next submission");
  $this
    ->assertNull($storage
    ->getNextSubmission($user1_submissions[2], NULL, $user1), "User 1 can't navigate forward to user 2's next submission");
  $this
    ->drupalLogin($user2);
  $this
    ->assertNull($storage
    ->getNextSubmission($user2_submissions[0], NULL, $user2), "User 2 can't navigate forward to user 2's next submission because of missing 'view own webform submission' permission");
  $this
    ->drupalLogin($admin_user);
  $this
    ->assertEqual($storage
    ->getNextSubmission($user1_submissions[2], NULL)
    ->id(), $user2_submissions[0]
    ->id(), "Admin user can navigate between user submissions");
  $this
    ->drupalLogout();

  // Check previous submission.
  $this
    ->drupalLogin($user1);
  $this
    ->assertEqual($storage
    ->getPreviousSubmission($user1_submissions[1], NULL, $user1)
    ->id(), $user1_submissions[0]
    ->id(), "User 1 can navigate backward to user 1's previous submission");
  $this
    ->drupalLogin($user2);
  $this
    ->assertNull($storage
    ->getPreviousSubmission($user2_submissions[0], NULL, $user2), "User 2 can't navigate backward to user 1's previous submission");
  $this
    ->drupalLogin($admin_user);
  $this
    ->assertEqual($storage
    ->getPreviousSubmission($user2_submissions[0], NULL)
    ->id(), $user1_submissions[2]
    ->id(), "Admin user can navigate between user submissions");
  $this
    ->drupalLogout();

  // Enable the saving of drafts.
  $webform
    ->setSetting('draft', WebformInterface::DRAFT_AUTHENTICATED)
    ->save();

  // Create drafts for user1 and user2.
  $this
    ->drupalLogin($user1);
  $this
    ->postSubmission($webform, [], 'Save Draft');
  $this
    ->drupalLogin($user2);
  $this
    ->postSubmission($webform, [], 'Save Draft');

  // Check totals remains the same with drafts.
  $this
    ->assertEqual($storage
    ->getTotal($webform), 6);
  $this
    ->assertEqual($storage
    ->getTotal($webform, NULL, $user1), 3);
  $this
    ->assertEqual($storage
    ->getTotal($webform, NULL, $user2), 3);

  // Save current drafts for user1 and user2.
  $this
    ->drupalLogin($user1);
  $this
    ->postSubmission($webform);
  $this
    ->drupalLogin($user2);
  $this
    ->postSubmission($webform);

  // Check totals have been updated.
  $this
    ->assertEqual($storage
    ->getTotal($webform), 8);
  $this
    ->assertEqual($storage
    ->getTotal($webform, NULL, $user1), 4);
  $this
    ->assertEqual($storage
    ->getTotal($webform, NULL, $user2), 4);
}