message_digest-8.x-1.x-dev/message_digest_ui/tests/src/Kernel/MessageDigestUiTest.php

message_digest_ui/tests/src/Kernel/MessageDigestUiTest.php
<?php

namespace Drupal\Tests\message_digest_ui\Kernel;

use Drupal\message\Entity\Message;
use Drupal\message_subscribe\Subscribers\DeliveryCandidate;
use Drupal\Tests\message_subscribe_email\Kernel\MessageSubscribeEmailTestBase;

/**
 * Basic tests for the Message Digest UI module.
 *
 * @group message_digest_ui
 */
class MessageDigestUiTest extends MessageSubscribeEmailTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'message_digest',
    'message_digest_ui',
    'options',
    'field',
  ];

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

    $this->installConfig([
      'message_digest_ui',
      'message_subscribe_email',
      'message_subscribe',
    ]);
    $this->messageSubscribers = $this->container->get('message_subscribe.subscribers');

    // Add a few more users.
    $permissions = [
      'flag subscribe_node',
      'unflag subscribe_node',
      'flag email_node',
      'unflag email_node',
    ];
    foreach (range(3, 4) as $i) {
      $this->users[$i] = $this->createUser($permissions);
    }

    // Add an additional node.
    $type = $this->nodes[1]->getType();
    $this->nodes[2] = $this->createNode(['type' => $type]);
  }

  /**
   * Test that notifiers are not altered for users that are not using digests.
   */
  public function testNotificationsDefault() {
    $this->assertEmpty(($this->users[2]->message_digest->value));

    // Subscribe user 2 to node 1.
    $flag = $this->flagService->getFlagById('subscribe_node');
    $this->flagService->flag($flag, $this->nodes[1], $this->users[2]);

    // Check default 'immediate' is working.
    $message = Message::create(['template' => $this->messageTemplate->id()]);
    $uids = $this->messageSubscribers->getSubscribers($this->nodes[1], $message);

    // Assert subscribers data.
    $expected_uids = [
      $this->users[2]->id() => new DeliveryCandidate(['subscribe_node'], ['email'], $this->users[2]->id()),
    ];

    $this->assertEquals($expected_uids, $uids, 'All expected subscribers were fetched.');
  }

  /**
   * Tests that notifiers are properly altered for digest users.
   */
  public function testNotifiersDigest() {
    // Set user 2 to receive daily digests.
    $this->users[2]->message_digest = 'message_digest:daily';
    $this->users[2]->save();
    $this->assertEquals('message_digest:daily', $this->users[2]->message_digest->value);

    // Subscribe users 2 and 3 to node 1.
    $flag = $this->flagService->getFlagById('subscribe_node');
    $this->container->set('current_user', $this->users[2]);
    $this->flagService->flag($flag, $this->nodes[1], $this->users[2]);
    $this->container->set('current_user', $this->users[3]);
    $this->flagService->flag($flag, $this->nodes[1], $this->users[3]);

    // Subscribe user 3 to node 2, and set to digests.
    $this->flagService->flag($flag, $this->nodes[2], $this->users[3]);
    $flaggings = $this->flagService->getAllEntityFlaggings($this->nodes[2], $this->users[3]);
    $this->assertEquals(2, count($flaggings));
    // User 3 should not have digests set for this node initially.
    $this->assertEmpty($flaggings[6]->message_digest->value);
    // Set to receive digests for node 2.
    $flaggings[6]->message_digest = 'message_digest:daily';
    $flaggings[6]->save();

    // Verify that the corresponding email flagging has the user's digest set.
    $flaggings = $this->flagService->getAllEntityFlaggings($this->nodes[1], $this->users[2]);
    $this->assertEquals(2, count($flaggings));
    $email_flag = $flaggings[2];
    $this->assertEquals('message_digest:daily', $email_flag->message_digest->value);

    // Assert subscribers data.
    $expected_uids = [
      $this->users[2]->id() => new DeliveryCandidate(['subscribe_node'], ['message_digest:daily'], $this->users[2]->id()),
      $this->users[3]->id() => new DeliveryCandidate(['subscribe_node'], ['email'], $this->users[3]->id()),
    ];

    $message = Message::create(['template' => $this->messageTemplate->id()]);
    $uids = $this->messageSubscribers->getSubscribers($this->nodes[1], $message);
    $this->assertEquals($expected_uids, $uids, 'All expected subscribers were fetched.');
  }

  /**
   * Test with advanced contexts.
   */
  public function testWithContexts() {
    // Set user 2  and 3 to receive daily digests.
    $this->users[2]->message_digest = 'message_digest:daily';
    $this->users[2]->save();
    $this->assertEquals('message_digest:daily', $this->users[2]->message_digest->value);
    $this->users[3]->message_digest = 'message_digest:daily';
    $this->users[3]->save();

    // Subscribe users 2 and 3 to node 1.
    $flag = $this->flagService->getFlagById('subscribe_node');
    $this->container->set('current_user', $this->users[2]);
    $this->flagService->flag($flag, $this->nodes[1], $this->users[2]);
    $this->container->set('current_user', $this->users[3]);
    $this->flagService->flag($flag, $this->nodes[1], $this->users[3]);

    // Subscribe users 2 and 3 to node 2.
    $this->flagService->flag($flag, $this->nodes[2], $this->users[3]);
    $this->flagService->flag($flag, $this->nodes[2], $this->users[2]);

    // Set user 2 to receive instant notifications for node 1.
    $flaggings = $this->flagService->getAllEntityFlaggings($this->nodes[1], $this->users[2]);
    $flaggings[2]->message_digest = '0';
    $flaggings[2]->save();

    // Set user 3 to receive weekly notifications for node 1. Digest should
    // still be daily below since it is smaller.
    $flaggings = $this->flagService->getAllEntityFlaggings($this->nodes[1], $this->users[3]);
    $flaggings[4]->message_digest = 'message_digest:weekly';
    $flaggings[4]->save();

    // Send a message about node 1 and 2. Since user 2 has daily for node 2 and
    // immediately for node 1, message should be sent immediately.
    $context = [
      'node' => [
        $this->nodes[1]->id(),
        $this->nodes[2]->id(),
      ],
    ];

    // Assert subscribers data.
    $expected_uids = [
      $this->users[2]->id() => new DeliveryCandidate(['subscribe_node'], ['email'], $this->users[2]->id()),
      $this->users[3]->id() => new DeliveryCandidate(['subscribe_node'], ['message_digest:daily'], $this->users[3]->id()),
    ];

    $message = Message::create(['template' => $this->messageTemplate->id()]);
    $uids = $this->messageSubscribers->getSubscribers($this->nodes[1], $message, [], $context);
    $this->assertEquals($expected_uids, $uids, 'All expected subscribers were fetched.');
  }

}

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

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