8000 added PHPUnit constraints and assertions for the Mailer · symfony/symfony@33cf603 · GitHub
[go: up one dir, main page]

Skip to content

Commit 33cf603

Browse files
committed
added PHPUnit constraints and assertions for the Mailer
1 parent 25bc535 commit 33cf603

File tree

4 files changed

+96
-5
lines changed

4 files changed

+96
-5
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bundle\FrameworkBundle\Test;
13+
14+
use PHPUnit\Framework\Constraint\LogicalAnd;
15+
use PHPUnit\Framework\Constraint\LogicalNot;
16+
use Symfony\Component\Mailer\Test\Constraint as MailerConstraint;
17+
use Symfony\Component\Mailer\Event\MessageEvents;
18+
use Symfony\Component\Mime\Test\Constraint as MimeConstraint;
19+
20+
trait MailerAssertionsTrait
21+
{
22+
public static function assertEmailCount(int $count, string $transport = null, string $message = ''): void
23+
{
24+
self::assertThat(self::getEvents(), new MailerConstraint\MailerMessageCount($count, $transport), $message);
25+
}
26+
27+
private static function getEvents(): MessageEvents
28+
{
29+
if (!self::getClient()->getRequest()) {
30+
static::fail('Unable to make email assertions. Did you forget to make an HTTP request?');
31+
}
32+
33+
if (!$logger = self::$container->get('mailer.logger_message_listener')) {
34+
static::fail('A client must have Mailer enabled to make email assertions. Did you forget to require symfony/mailer?');
35+
}
36+
37+
return $logger->getEvents();
38+
}
39+
}

src/Symfony/Bundle/FrameworkBundle/Test/WebTestAssertionsTrait.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,9 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle\Test;
1313

14-
/**
15-
* Ideas borrowed from Laravel Dusk's assertions.
16-
*
17-
* @see https://laravel.com/docs/5.7/dusk#available-assertions
18-
*/
1914
trait WebTestAssertionsTrait
2015
{
2116
use BrowserKitAssertionsTrait;
2217
use DomCrawlerAssertionsTrait;
18+
use MailerAssertionsTrait;
2319
}

src/Symfony/Bundle/FrameworkBundle/Test/WebTestCase.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ abstract class WebTestCase extends KernelTestCase
2323
{
2424
use ForwardCompatTestTrait;
2525
use WebTestAssertionsTrait;
26+
use MailerAssertionsTrait;
2627

2728
private function doTearDown()
2829
{
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Mailer\Test\Constraint;
13+
14+
use PHPUnit\Framework\Constraint\Constraint;
15+
use Symfony\Component\Mailer\Event\MessageEvents;
16+
17+
final class MailerMessageCount extends Constraint
18+
{
19+
private $expectedValue;
20+
private $transport;
21+
22+
public function __construct(int $expectedValue, string $transport = null)
23+
{
24+
$this->expectedValue = $expectedValue;
25+
$this->transport = $transport;
26+
}
27+
28+
/**
29+
* {@inheritdoc}
30+
*/
31+
public function toString(): string
32+
{
33+
return sprintf('%shas sent "%d" emails', $this->transport ? $this->transport.' ' : '', $this->expectedValue);
34+
}
35+
36+
/**
37+
* @param MessageEvents $events
38+
*
39+
* {@inheritdoc}
40+
*/
41+
protected function matches($events): bool
42+
{
43+
return $this->expectedValue === $events->getMessageCount($this->transport);
44+
}
45+
46+
/**
47+
* @param MessageEvents $events
48+
*
49+
* {@inheritdoc}
50+
*/
51+
protected function failureDescription($events): string
52+
{
53+
return sprintf('the Transport %s (%d sent)', $this->toString(), $events->getMessageCount($this->transport));
54+
}
55+
}

0 commit comments

Comments
 (0)
0