workflow_participants-8.x-2.x-dev/tests/src/Kernel/NotificationsTest.php

tests/src/Kernel/NotificationsTest.php
<?php

namespace Drupal\Tests\workflow_participants\Kernel;

use Drupal\Core\Test\AssertMailTrait;
use Drupal\entity_test\Entity\EntityTestRev;
use Drupal\Tests\content_moderation_notifications\Kernel\ContentModerationNotificationCreateTrait;
use Drupal\Tests\user\Traits\UserCreationTrait;

/**
 * Verify that notifications are sent via content moderation notifications.
 *
 * @group workflow_participants
 *
 * @requires module content_moderation_notifications
 */
class NotificationsTest extends WorkflowParticipantsTestBase {

  use ContentModerationNotificationCreateTrait;
  use AssertMailTrait;
  use UserCreationTrait;

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'content_moderation_notifications',
    'filter_test',
  ];

  /**
   * Participants.
   *
   * @var \Drupal\user\UserInterface[]
   */
  protected $participants;

  /**
   * {@inheritdoc}
   */
  protected function setUp():void {
    parent::setUp();

    $this->installConfig(['filter_test']);
    $this->installSchema('system', ['sequences']);

    // Dummy UID 1.
    $this->createUser();

    // Setup site email.
    $this->config('system.site')->set('mail', 'admin@example.com')->save();

    $participant_role = $this->createRole(['can be workflow participant']);
    foreach (range(1, 10) as $i) {
      $account = $this->createUser();
      $account->addRole($participant_role);
      $account->save();
      $this->participants[$i] = $account;
    }

    // Disable participant notifications, as those are tested elsewhere.
    $this->config('workflow_participants.settings')->set('enable_notifications', FALSE)->save();
  }

  /**
   * Verify notifications are sent as configured.
   */
  public function testNotifications() {
    // Create a notification.
    $notification = $this->createNotification([
      'transitions' => ['archive' => 'archive'],
    ]);

    // Enable just reviewer notifications.
    $notification->setThirdPartySetting('workflow_participants', 'reviewers', TRUE);
    $notification->save();

    // Add an entity and some participants.
    $entity = EntityTestRev::create();
    $entity->save();

    /** @var \Drupal\workflow_participants\Entity\WorkflowParticipantsInterface $participants */
    $participants = \Drupal::entityTypeManager()->getStorage('workflow_participants')->loadForModeratedEntity($entity);
    $expected = [];
    foreach ([3, 5, 7] as $uid) {
      $participants->reviewers[] = $this->participants[$uid]->id();
      $expected[] = $this->participants[$uid]->getEmail();
    }
    $participants->save();

    $entity = EntityTestRev::load($entity->id());
    $entity->moderation_state = 'published';
    $entity->save();
    $this->assertEmpty($this->getMails());

    $entity = EntityTestRev::load($entity->id());
    $entity->moderation_state = 'archived';
    $entity->save();
    $this->assertCount(1, $this->getMails());
    $this->assertMail('to', 'admin@example.com');

    // Recipients are BCC'd.
    $mail = $this->getMails()[0];
    $this->assertEquals(implode(',', $expected), $mail['headers']['Bcc']);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc