Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0f38760

Browse files
Merge branch '6.4' into 7.4
* 6.4: [Console] Fix failing test Revert "bug #62872 [Messenger] Fix processing batches (HypeMC)" [FrameworkBundle] Fix BrowserKitAssertionsTrait compatibility with HttpBrowser Add support for Mailjet SMTP relay X-MJ-TemplateErrorReporting header format to MailjetApiTransport.
2 parents 3f9fb06 + 43b5141 commit 0f38760

9 files changed

Lines changed: 80 additions & 74 deletions

File tree

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
use PHPUnit\Framework\ExpectationFailedException;
1818
use Symfony\Component\BrowserKit\AbstractBrowser;
1919
use Symfony\Component\BrowserKit\History;
20+
use Symfony\Component\BrowserKit\Request as BrowserKitRequest;
21+
use Symfony\Component\BrowserKit\Response as BrowserKitResponse;
2022
use Symfony\Component\BrowserKit\Test\Constraint as BrowserKitConstraint;
2123
use Symfony\Component\HttpFoundation\Request;
2224
use Symfony\Component\HttpFoundation\Response;
@@ -223,6 +225,14 @@ private static function getResponse(): Response
223225
static::fail('A client must have an HTTP Response to make assertions. Did you forget to make an HTTP request?');
224226
}
225227

228+
if ($response instanceof BrowserKitResponse) {
229+
return new Response(
230+
$response->getContent(),
231+
$response->getStatusCode(),
232+
$response->getHeaders()
233+
);
234+
}
235+
226236
return $response;
227237
}
228238

@@ -232,6 +242,18 @@ private static function getRequest(): Request
232242
static::fail('A client must have an HTTP Request to make assertions. Did you forget to make an HTTP request?');
233243
}
234244

245+
if ($request instanceof BrowserKitRequest) {
246+
return Request::create(
247+
$request->getUri(),
248+
$request->getMethod(),
249+
$request->getParameters(),
250+
$request->getCookies(),
251+
$request->getFiles(),
252+
$request->getServer(),
253+
$request->getContent()
254+
);
255+
}
256+
235257
return $request;
236258
}
237259
}

src/Symfony/Component/Console/Tests/Helper/TableTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2073,7 +2073,7 @@ public function testGithubIssue60038WidthOfCellWithEmoji()
20732073
$table->render();
20742074

20752075
$this->assertSame(<<<TABLE
2076-
+---------------------------------- Test Title -------------+-----------------+
2076+
+-------------------------------- Test Title ---------------+-----------------+
20772077
| Title | Author |
20782078
+-----------------------------------------------------------+-----------------+
20792079
| 🎭 💫 ☯ Divine Comedy | Dante Alighieri |

src/Symfony/Component/Mailer/Bridge/Mailjet/Tests/Transport/MailjetApiTransportTest.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,4 +427,50 @@ public function testHeaderToMessage()
427427
$method->invoke($transport, $email, $envelope)
428428
);
429429
}
430+
431+
public function testTemplateErrorReportingHeaderSupportsSmtpRelayFormat()
432+
{
433+
$email = (new Email())
434+
->subject('Sending email to mailjet API')
435+
->replyTo(new Address('[email protected]', 'Qux'));
436+
$email->getHeaders()
437+
->addTextHeader('X-MJ-TemplateErrorReporting', '[email protected]');
438+
$envelope = new Envelope(new Address('[email protected]', 'Foo'), [
439+
new Address('[email protected]', 'Bar'),
440+
]);
441+
442+
$transport = new MailjetApiTransport(self::USER, self::PASSWORD);
443+
$method = new \ReflectionMethod(MailjetApiTransport::class, 'getPayload');
444+
self::assertSame(
445+
[
446+
'Messages' => [
447+
[
448+
'From' => [
449+
'Email' => '[email protected]',
450+
'Name' => 'Foo',
451+
],
452+
'To' => [
453+
[
454+
'Email' => '[email protected]',
455+
'Name' => '',
456+
],
457+
],
458+
'Subject' => 'Sending email to mailjet API',
459+
'Attachments' => [],
460+
'InlinedAttachments' => [],
461+
'ReplyTo' => [
462+
'Email' => '[email protected]',
463+
'Name' => 'Qux',
464+
],
465+
'TemplateErrorReporting' => [
466+
'Email' => '[email protected]',
467+
'Name' => '',
468+
],
469+
],
470+
],
471+
'SandBoxMode' => false,
472+
],
473+
$method->invoke($transport, $email, $envelope)
474+
);
475+
}
430476
}

src/Symfony/Component/Mailer/Bridge/Mailjet/Transport/MailjetApiTransport.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class MailjetApiTransport extends AbstractApiTransport
3939
private const HEADER_TO_MESSAGE = [
4040
'x-mj-templatelanguage' => ['TemplateLanguage', 'bool'],
4141
'x-mj-templateid' => ['TemplateID', 'int'],
42-
'x-mj-templateerrorreporting' => ['TemplateErrorReporting', 'json'],
42+
'x-mj-templateerrorreporting' => ['TemplateErrorReporting', 'templateerrorreporting'],
4343
'x-mj-templateerrordeliver' => ['TemplateErrorDeliver', 'bool'],
4444
'x-mj-vars' => ['Variables', 'json'],
4545
'x-mj-customid' => ['CustomID', 'string'],
@@ -205,6 +205,9 @@ private function castCustomHeader(string $value, string $type): mixed
205205
'int' => (int) $value,
206206
'json' => json_decode($value, true, 512, \JSON_THROW_ON_ERROR),
207207
'string' => $value,
208+
209+
// The API transport supports a richer address format than the SMTP relay. Use a special case to support both with BC.
210+
'templateerrorreporting' => false !== filter_var($value, \FILTER_VALIDATE_EMAIL) ? ['Email' => $value, 'Name' => ''] : $this->castCustomHeader($value, 'json'),
208211
};
209212
}
210213
}

src/Symfony/Component/Messenger/Handler/BatchHandlerTrait.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,6 @@ trait BatchHandlerTrait
2020

2121
public function flush(bool $force): void
2222
{
23-
if (!$force && !$this->shouldFlush()) {
24-
return;
25-
}
26-
2723
if ($jobs = $this->jobs) {
2824
$this->jobs = [];
2925
$this->process($jobs);

src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
use Symfony\Component\Messenger\Event\MessageSentToTransportsEvent;
1818
use Symfony\Component\Messenger\Event\SendMessageToTransportsEvent;
1919
use Symfony\Component\Messenger\Exception\NoSenderForMessageException;
20-
use Symfony\Component\Messenger\Stamp\FlushBatchHandlersStamp;
2120
use Symfony\Component\Messenger\Stamp\ReceivedStamp;
2221
use Symfony\Component\Messenger\Stamp\SentStamp;
2322
use Symfony\Component\Messenger\Transport\Sender\SendersLocatorInterface;
@@ -47,9 +46,7 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope
4746

4847
if ($envelope->all(ReceivedStamp::class)) {
4948
// it's a received message, do not send it back
50-
if (!$envelope->all(FlushBatchHandlersStamp::class)) {
51-
$this->logger?->info('Received message {class}', $context);
52-
}
49+
$this->logger?->info('Received message {class}', $context);
5350
} else {
5451
$senders = $this->sendersLocator->getSenders($envelope);
5552
$senders = \is_array($senders) ? $senders : iterator_to_array($senders);

src/Symfony/Component/Messenger/Tests/Middleware/HandleMessageMiddlewareTest.php

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -320,54 +320,6 @@ private function process(array $jobs): void
320320
$this->assertSame([$message], $handler->processedMessages);
321321
}
322322

323-
public function testBatchHandlerFlushFalseDoesNotFlushPartialBatch()
324-
{
325-
$handler = new class implements BatchHandlerInterface {
326-
public array $processedMessages = [];
327-
328-
use BatchHandlerTrait;
329-
330-
public function __invoke(DummyMessage $message, ?Acknowledger $ack = null)
331-
{
332-
return $this->handle($message, $ack);
333-
}
334-
335-
private function getBatchSize(): int
336-
{
337-
return 3;
338-
}
339-
340-
private function process(array $jobs): void
341-
{
342-
$this->processedMessages = array_column($jobs, 0);
343-
344-
foreach ($jobs as [$job, $ack]) {
345-
$ack->ack($job);
346-
}
347-
}
348-
};
349-
350-
$middleware = new HandleMessageMiddleware(new HandlersLocator([
351-
DummyMessage::class => [new HandlerDescriptor($handler)],
352-
]));
353-
354-
$ack = static function () {};
355-
356-
$message = new DummyMessage('Hey');
357-
$envelope = $middleware->handle(new Envelope($message, [new AckStamp($ack)]), new StackMiddleware());
358-
359-
$this->assertEmpty($handler->processedMessages);
360-
$this->assertCount(1, $envelope->all(NoAutoAckStamp::class));
361-
362-
$handler->flush(false);
363-
364-
$this->assertEmpty($handler->processedMessages);
365-
366-
$handler->flush(true);
367-
368-
$this->assertSame([$message], $handler->processedMessages);
369-
}
370-
371323
public function testHandlerArgumentsStamp()
372324
{
373325
$message = new DummyMessage('Hey');

src/Symfony/Component/Messenger/Tests/WorkerTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -535,15 +535,15 @@ public function testFlushBatchOnIdle()
535535
static $i = 0;
536536
if (1 < ++$i) {
537537
$event->getWorker()->stop();
538+
$this->assertSame(1, $receiver->getAcknowledgeCount());
539+
} else {
540+
$this->assertSame(0, $receiver->getAcknowledgeCount());
538541
}
539-
$this->assertSame(0, $receiver->getAcknowledgeCount());
540542
});
541543

542544
$worker = new Worker([$receiver], $bus, $dispatcher, clock: new MockClock());
543545
$worker->run();
544546

545-
$this->assertSame(1, $receiver->getAcknowledgeCount());
546-
547547
$this->assertSame($expectedMessages, $handler->processedMessages);
548548
}
549549

@@ -655,7 +655,7 @@ public function dispatch(object $message, array $stamps = []): Envelope
655655
$unacks = $unacksProperty->getValue($worker);
656656
$dummyHandler = new DummyBatchHandler();
657657
$envelopeWithNoAutoAck = $envelope->with(new NoAutoAckStamp(new HandlerDescriptor($dummyHandler)));
658-
$unacks[$dummyHandler] = [$envelopeWithNoAutoAck, 'transport', false];
658+
$unacks[$dummyHandler] = [$envelopeWithNoAutoAck, 'transport'];
659659

660660
$worker->run();
661661

src/Symfony/Component/Messenger/Worker.php

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ private function handleMessage(Envelope $envelope, string $transportName): void
176176
if (!$acked && !$noAutoAckStamp) {
177177
$this->acks[] = [$transportName, $envelope, $e];
178178
} elseif ($noAutoAckStamp) {
179-
$this->unacks[$noAutoAckStamp->getHandlerDescriptor()->getBatchHandler()] = [$envelope->withoutAll(AckStamp::class), $transportName, &$acked];
179+
$this->unacks[$noAutoAckStamp->getHandlerDescriptor()->getBatchHandler()] = [$envelope->withoutAll(AckStamp::class), $transportName];
180180
}
181181

182182
$this->ack();
@@ -269,22 +269,12 @@ private function flush(bool $force): bool
269269
$this->unacks = new \SplObjectStorage();
270270

271271
foreach ($unacks as $batchHandler) {
272-
[$envelope, $transportName, $acked] = $unacks[$batchHandler];
272+
[$envelope, $transportName] = $unacks[$batchHandler];
273273
try {
274-
$e = null;
275274
$this->bus->dispatch($envelope->with(new FlushBatchHandlersStamp($force)));
276275
} catch (\Throwable $e) {
277276
$envelope = $envelope->withoutAll(NoAutoAckStamp::class);
278277
$this->acks[] = [$transportName, $envelope, $e];
279-
continue;
280-
}
281-
282-
$noAutoAckStamp = $envelope->last(NoAutoAckStamp::class);
283-
284-
if (!$acked && !$noAutoAckStamp) {
285-
$this->acks[] = [$transportName, $envelope, $e];
286-
} elseif ($noAutoAckStamp) {
287-
$this->unacks[$noAutoAckStamp->getHandlerDescriptor()->getBatchHandler()] = [$envelope->withoutAll(AckStamp::class), $transportName, &$acked];
288278
}
289279
}
290280

0 commit comments

Comments
 (0)