You are here

WebformGroupTokensTest.php in Webform 6.x

File

modules/webform_group/tests/src/Functional/WebformGroupTokensTest.php
View source
<?php

namespace Drupal\Tests\webform_group\Functional;

use Drupal\webform\Entity\WebformSubmission;

/**
 * Tests for webform tokens access.
 *
 * @group webform_group
 */
class WebformGroupTokensTest extends WebformGroupBrowserTestBase {

  /**
   * Tests webform access tokens.
   */
  public function testWebformAccessTokens() {

    // Default group.
    $group = $this
      ->createGroup([
      'type' => 'default',
    ]);

    // Webform node.
    $node = $this
      ->createWebformNode('contact');

    // Add webform node to default group.
    $group
      ->addContent($node, 'group_node:webform');

    // Users.
    $member_user = $this
      ->createUser([], 'member', FALSE, [
      'mail' => 'member@example.com',
    ]);
    $group
      ->addMember($member_user);
    $custom_user = $this
      ->createUser([], 'custom', FALSE, [
      'mail' => 'custom@example.com',
    ]);
    $group
      ->addMember($custom_user, [
      'group_roles' => [
        'default-custom',
      ],
    ]);
    $owner_user = $group
      ->getOwner();
    $group
      ->save();

    // Create a test submission.
    $edit = [
      'name' => 'name',
      'email' => 'name@example.com',
      'subject' => 'subject',
      'message' => 'message',
    ];
    $sid = $this
      ->postNodeSubmission($node, $edit);
    $webform_submission = WebformSubmission::load($sid);

    /** @var \Drupal\webform\WebformTokenManagerInterface $token_manager */
    $token_manager = \Drupal::service('webform.token_manager');
    $token_data['webform_group'] = $webform_submission;

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

    // [webform_group:role:GROUP_ROLE] tokens.

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

    // Enable group roles and owner.
    \Drupal::configFactory()
      ->getEditable('webform_group.settings')
      ->set('mail.group_roles', [
      'member',
      'custom',
      'outsider',
    ])
      ->set('mail.group_owner', TRUE)
      ->save();
    \Drupal::token()
      ->resetInfo();

    // Check [webform_group:role:member] token.
    $result = $token_manager
      ->replace('[webform_group:role:member]', $webform_submission, $token_data);
    $this
      ->assertEqual(implode(',', [
      $owner_user
        ->getEmail(),
      $member_user
        ->getEmail(),
      $custom_user
        ->getEmail(),
    ]), $result);

    // Check [webform_group:role:custom] token.
    $result = $token_manager
      ->replace('[webform_group:role:custom]', $webform_submission, $token_data);
    $this
      ->assertEqual(implode(',', [
      $custom_user
        ->getEmail(),
    ]), $result);

    // Check [webform_group:role:outsider] token returns nothing.
    $result = $token_manager
      ->replace('[webform_group:role:outsider]', $webform_submission, $token_data);
    $this
      ->assertEqual('', $result);

    // Check [webform_group:owner:mail] token returns the group's owner email.
    $result = $token_manager
      ->replace('[webform_group:owner:mail]', $webform_submission, $token_data);
    $this
      ->assertEqual($owner_user
      ->getEmail(), $result);
  }

}

Classes

Namesort descending Description
WebformGroupTokensTest Tests for webform tokens access.