rules-8.x-3.x-dev/tests/src/Unit/Integration/RulesAction/SendAccountEmailTest.php

tests/src/Unit/Integration/RulesAction/SendAccountEmailTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\rules\Unit\Integration\RulesAction {

  use Drupal\Core\Logger\LoggerChannelInterface;
  use Drupal\Core\Logger\LoggerChannelFactoryInterface;
  use Drupal\Tests\rules\Unit\Integration\RulesEntityIntegrationTestBase;
  use Drupal\user\UserInterface;

  /**
   * @coversDefaultClass \Drupal\rules\Plugin\RulesAction\SendAccountEmail
   * @group RulesAction
   */
  class SendAccountEmailTest extends RulesEntityIntegrationTestBase {

    /**
     * @var \Drupal\Core\Logger\LoggerChannelInterface|\Prophecy\Prophecy\ProphecyInterface
     */
    protected $logger;

    /**
     * The action to be tested.
     *
     * @var \Drupal\rules\Core\RulesActionInterface
     */
    protected $action;

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

      $this->enableModule('user');

      // Mock the logger.factory service, make it return the Rules logger
      // channel, and register it in the container.
      $this->logger = $this->prophesize(LoggerChannelInterface::class);
      $logger_factory = $this->prophesize(LoggerChannelFactoryInterface::class);
      $logger_factory->get('rules')->willReturn($this->logger->reveal());
      $this->container->set('logger.factory', $logger_factory->reveal());

      $this->action = $this->actionManager->createInstance('rules_send_account_email');
    }

    /**
     * Tests the summary.
     *
     * @covers ::summary
     */
    public function testSummary(): void {
      $this->assertEquals('Send account email', $this->action->summary());
    }

    /**
     * Tests the action execution.
     *
     * @covers ::execute
     */
    public function testActionExecution(): void {
      $account = $this->prophesizeEntity(UserInterface::class);
      $account->mail = 'klausi@example.com';
      $mail_type = 'test_mail_type';
      $this->action->setContextValue('user', $account->reveal())
        ->setContextValue('email_type', $mail_type);

      $this->action->execute();

      // To get the notifications that were sent, we call _user_mail_notify()
      // with no parameters.
      $notifications = _user_mail_notify();
      $this->assertSame([$mail_type => 1], $notifications);
    }

  }

}

namespace {

  /*
   * We fake the _user_mail_notify() when using unit tests and we adapt it so
   * that we can get how many times the function was called with a specific $op.
   */
  if (!function_exists('_user_mail_notify')) {

    /**
     * Dummy replacement for testing.
     */
    function _user_mail_notify($op = NULL, $account = NULL, $langcode = NULL) {
      static $notifications_sent = [];
      if (!empty($op)) {
        if (!isset($notifications_sent[$op])) {
          $notifications_sent[$op] = 0;
        }
        $notifications_sent[$op]++;
        // Return, because we check 'result' for indication of success.
        return ['result' => $notifications_sent];
      }
      return $notifications_sent;
    }

  }
}

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

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