Skip to content

Commit 9b94f3b

Browse files
committed
[make:message] use AsMessage for routing if available
1 parent aa37c3c commit 9b94f3b

File tree

3 files changed

+40
-11
lines changed

3 files changed

+40
-11
lines changed

src/Maker/MakeMessage.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use Symfony\Component\Console\Command\Command;
2222
use Symfony\Component\Console\Input\InputArgument;
2323
use Symfony\Component\Console\Input\InputInterface;
24+
use Symfony\Component\Messenger\Attribute\AsMessage;
2425
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
2526
use Symfony\Component\Messenger\MessageBusInterface;
2627

@@ -86,6 +87,8 @@ public function interact(InputInterface $input, ConsoleStyle $io, Command $comma
8687

8788
public function generate(InputInterface $input, ConsoleStyle $io, Generator $generator): void
8889
{
90+
$chosenTransport = $input->getArgument('chosen-transport');
91+
8992
$messageClassNameDetails = $generator->createClassNameDetails(
9093
$input->getArgument('name'),
9194
'Message\\'
@@ -97,9 +100,19 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen
97100
'Handler'
98101
);
99102

103+
$useStatements = new UseStatementGenerator([]);
104+
105+
if ($chosenTransport && class_exists(AsMessage::class)) {
106+
$useStatements->addUseStatement(AsMessage::class);
107+
}
108+
100109
$generator->generateClass(
101110
$messageClassNameDetails->getFullName(),
102-
'message/Message.tpl.php'
111+
'message/Message.tpl.php',
112+
[
113+
'use_statements' => $useStatements,
114+
'transport' => class_exists(AsMessage::class) ? $chosenTransport : null,
115+
]
103116
);
104117

105118
$useStatements = new UseStatementGenerator([
@@ -116,7 +129,7 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen
116129
]
117130
);
118131

119-
if (null !== $chosenTransport = $input->getArgument('chosen-transport')) {
132+
if ($chosenTransport && !class_exists(AsMessage::class)) {
120133
$this->updateMessengerConfig($generator, $chosenTransport, $messageClassNameDetails->getFullName());
121134
}
122135

templates/message/Message.tpl.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
namespace <?= $namespace; ?>;
44

5+
<?= $use_statements; ?>
6+
7+
<?php if ($transport): ?>#[AsMessage('<?= $transport ?>')]<?= "\n" ?><?php endif ?>
58
final class <?= $class_name."\n" ?>
69
{
710
/*

tests/Maker/MakeMessageTest.php

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Bundle\MakerBundle\Test\MakerTestCase;
1616
use Symfony\Bundle\MakerBundle\Test\MakerTestDetails;
1717
use Symfony\Bundle\MakerBundle\Test\MakerTestRunner;
18+
use Symfony\Component\Messenger\Attribute\AsMessage;
1819
use Symfony\Component\Yaml\Yaml;
1920

2021
class MakeMessageTest extends MakerTestCase
@@ -63,15 +64,24 @@ public function getTestDetails(): \Generator
6364

6465
$this->assertStringContainsString('Success', $output);
6566

66-
$messengerConfig = $runner->readYaml('config/packages/messenger.yaml');
67-
$this->assertArrayHasKey('routing', $messengerConfig['framework']['messenger']);
68-
$this->assertArrayHasKey('App\Message\SendWelcomeEmail', $messengerConfig['framework']['messenger']['routing']);
69-
$this->assertSame(
70-
'async',
71-
$messengerConfig['framework']['messenger']['routing']['App\Message\SendWelcomeEmail']
72-
);
73-
7467
$this->runMessageTest($runner, 'it_generates_message_with_transport.php');
68+
69+
$messageContents = file_get_contents($runner->getPath('src/Message/SendWelcomeEmail.php'));
70+
71+
if (!str_contains($messageContents, AsMessage::class)) {
72+
$messengerConfig = $runner->readYaml('config/packages/messenger.yaml');
73+
$this->assertArrayHasKey('routing', $messengerConfig['framework']['messenger']);
74+
$this->assertArrayHasKey('App\Message\SendWelcomeEmail', $messengerConfig['framework']['messenger']['routing']);
75+
$this->assertSame(
76+
'async',
77+
$messengerConfig['framework']['messenger']['routing']['App\Message\SendWelcomeEmail']
78+
);
79+
80+
return;
81+
}
82+
83+
$this->assertStringContainsString(AsMessage::class, $messageContents);
84+
$this->assertStringContainsString("#[AsMessage('async')]", $messageContents);
7585
}),
7686
];
7787

@@ -86,10 +96,13 @@ public function getTestDetails(): \Generator
8696

8797
$this->assertStringContainsString('Success', $output);
8898

99+
$this->runMessageTest($runner, 'it_generates_message_with_transport.php');
100+
89101
$messengerConfig = $runner->readYaml('config/packages/messenger.yaml');
90102
$this->assertArrayNotHasKey('routing', $messengerConfig['framework']['messenger']);
91103

92-
$this->runMessageTest($runner, 'it_generates_message_with_transport.php');
104+
$messageContents = file_get_contents($runner->getPath('src/Message/SendWelcomeEmail.php'));
105+
$this->assertStringNotContainsString(AsMessage::class, $messageContents);
93106
}),
94107
];
95108
}

0 commit comments

Comments
 (0)