Skip to content

Commit 634bca4

Browse files
Merge branch '6.0' into 6.1
* 6.0: [Mailer] Restore X-Transport after failure [Messenger] Add PostgreSqlConnection tests
2 parents bf39ec4 + 6a32627 commit 634bca4

File tree

3 files changed

+97
-1
lines changed

3 files changed

+97
-1
lines changed

src/Symfony/Component/Mailer/Tests/Transport/TransportsTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,28 @@ public function testTransportDoesNotExist()
6464
$this->expectExceptionMessage('The "foobar" transport does not exist (available transports: "foo", "bar").');
6565
$transport->send($email);
6666
}
67+
68+
public function testTransportRestoredAfterFailure()
69+
{
70+
$exception = new \Exception();
71+
72+
$fooTransport = $this->createMock(TransportInterface::class);
73+
$fooTransport->method('send')
74+
->willThrowException($exception);
75+
76+
$transport = new Transports([
77+
'foo' => $fooTransport,
78+
]);
79+
80+
$headers = (new Headers())->addTextHeader('X-Transport', 'foo');
81+
$email = new Message($headers, new TextPart('...'));
82+
83+
$this->expectExceptionObject($exception);
84+
85+
try {
86+
$transport->send($email);
87+
} finally {
88+
$this->assertSame('foo', $email->getHeaders()->getHeaderBody('X-Transport'));
89+
}
90+
}
6791
}

src/Symfony/Component/Mailer/Transport/Transports.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,13 @@ public function send(RawMessage $message, Envelope $envelope = null): ?SentMessa
5959
throw new InvalidArgumentException(sprintf('The "%s" transport does not exist (available transports: "%s").', $transport, implode('", "', array_keys($this->transports))));
6060
}
6161

62-
return $this->transports[$transport]->send($message, $envelope);
62+
try {
63+
return $this->transports[$transport]->send($message, $envelope);
64+
} catch (\Throwable $e) {
65+
$headers->addTextHeader('X-Transport', $transport);
66+
67+
throw $e;
68+
}
6369
}
6470

6571
public function __toString(): string
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
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\Messenger\Bridge\Doctrine\Tests\Transport;
13+
14+
use Doctrine\DBAL\Connection;
15+
use Doctrine\DBAL\DriverManager;
16+
use Doctrine\DBAL\Schema\AbstractSchemaManager;
17+
use PHPUnit\Framework\TestCase;
18+
use Symfony\Component\Messenger\Bridge\Doctrine\Tests\Fixtures\DummyMessage;
19+
use Symfony\Component\Messenger\Bridge\Doctrine\Transport\PostgreSqlConnection;
20+
21+
/**
22+
* @requires extension pdo_pgsql
23+
* @group integration
24+
*/
25+
class DoctrinePostgreSqlIntegrationTest extends TestCase
26+
{
27+
/** @var Connection */
28+
private $driverConnection;
29+
/** @var PostgreSqlConnection */
30+
private $connection;
31+
32+
protected function setUp(): void
33+
{
34+
if (!$host = getenv('POSTGRES_HOST')) {
35+
$this->markTestSkipped('Missing POSTGRES_HOST env variable');
36+
}
37+
38+
$this->driverConnection = DriverManager::getConnection(['url' => "pgsql://postgres:password@$host"]);
39+
$this->connection = new PostgreSqlConnection(['table_name' => 'queue_table'], $this->driverConnection);
40+
$this->connection->setup();
41+
}
42+
43+
protected function tearDown(): void
44+
{
45+
$this->createSchemaManager()->dropTable('queue_table');
46+
$this->driverConnection->close();
47+
}
48+
49+
public function testPostgreSqlConnectionSendAndGet()
50+
{
51+
$this->connection->send('{"message": "Hi"}', ['type' => DummyMessage::class]);
52+
53+
$encoded = $this->connection->get();
54+
$this->assertEquals('{"message": "Hi"}', $encoded['body']);
55+
$this->assertEquals(['type' => DummyMessage::class], $encoded['headers']);
56+
57+
$this->assertNull($this->connection->get());
58+
}
59+
60+
private function createSchemaManager(): AbstractSchemaManager
61+
{
62+
return method_exists($this->driverConnection, 'createSchemaManager')
63+
? $this->driverConnection->createSchemaManager()
64+
: $this->driverConnection->getSchemaManager();
65+
}
66+
}

0 commit comments

Comments
 (0)