test_support-1.0.x-dev/tests/src/Traits/Support/InteractsWithMail.php

tests/src/Traits/Support/InteractsWithMail.php
<?php

namespace Drupal\Tests\test_support\Traits\Support;

use Drupal\Tests\test_support\Traits\Support\Mail\TestMail;
use Illuminate\Support\Collection;

trait InteractsWithMail
{
    /** @return TestMail[] */
    public function getSentMail(?string $fromModule = null): array
    {
        $mail = $this->container->get('state')->get('system.test_mail_collector');

        if ($mail === null) {
            return [];
        }

        return collect($mail)->when($fromModule, function (Collection $mail, string $fromModule) {
            return $mail->filter(function (array $mail) use ($fromModule) {
                return $mail['module'] === $fromModule;
            });
        })->mapInto(TestMail::class)->toArray();
    }

    public function assertMailSent(?int $numberOfMailSent = null): self
    {
        $mail = $this->getSentMail();

        $this->assertNotEmpty($mail);

        if ($numberOfMailSent) {
            $this->assertEquals($numberOfMailSent, count($mail));
        }

        return $this;
    }

    public function assertNoMailSent(): self
    {
        $this->assertEmpty($this->getSentMail());

        return $this;
    }

    public function getMailSentTo(string $mailTo): ?TestMail
    {
        foreach ($this->getSentMail() as $mail) {
            if ($mail->getTo() !== $mailTo) {
                continue;
            }

            return $mail;
        }

        return null;
    }

    public function assertMailSentTo(string $to, ?\Closure $callback = null): self
    {
        $mail = $this->getMailSentTo($to);

        if ($mail === null) {
            $this->fail('No email was sent to ' . $to);
        }

        $this->assertEquals($to, $mail->getTo());

        if ($callback) {
            $callback($mail);
        }

        return $this;
    }

    /** @return TestMail[] */
    public function getMailWithSubject(string $subject): array
    {
        $sentMail = [];

        foreach ($this->getSentMail() as $mail) {
            if ($mail->getSubject() !== $subject) {
                continue;
            }

            $sentMail[] = $mail;
        }

        return $sentMail;
    }

    /** The closure is passed to each mail item found with the given subject */
    public function assertMailSentWithSubject(string $subject, ?\Closure $callback = null): self
    {
        $mailItems = $this->getMailWithSubject($subject);

        if ($mailItems === []) {
            $this->fail('No email was sent with subject ' . $subject);
        }

        foreach ($mailItems as $mail) {
            $this->assertEquals($subject, $mail->getSubject());

            if ($callback === null) {
                continue;
            }

            $callback($mail);
        }

        return $this;
    }

    public function clearMail(): self
    {
        $this->container->get('state')->set('system.test_mail_collector', []);

        return $this;
    }
}

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

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