8000 [Messenger] Add completion to command messenger:consume · symfony/symfony@f99f586 · GitHub
[go: up one dir, main page]

Skip to content

Commit f99f586

Browse files
committed
[Messenger] Add completion to command messenger:consume
1 parent d0f6b98 commit f99f586

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed

src/Symfony/Bundle/FrameworkBundle/Resources/config/console.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@
151151
service('logger')->nullOnInvalid(),
152152
[], // Receiver names
15315 10000 3
service('messenger.listener.reset_services')->nullOnInvalid(),
154+
[], // Bus names
154155
])
155156
->tag('console.command')
156157
->tag('monolog.logger', ['channel' => 'messenger'])

src/Symfony/Component/Messenger/Command/ConsumeMessagesCommand.php

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
use Psr\Container\ContainerInterface;
1515
use Psr\Log\LoggerInterface;
1616
use Symfony\Component\Console\Command\Command;
17+
use Symfony\Component\Console\Completion\CompletionInput;
18+
use Symfony\Component\Console\Completion\CompletionSuggestions;
1719
use Symfony\Component\Console\Exception\RuntimeException;
1820
use Symfony\Component\Console\Input\InputArgument;
1921
use Symfony\Component\Console\Input\InputInterface;
@@ -45,15 +47,17 @@ class ConsumeMessagesCommand extends Command
4547
private $logger;
4648
private $receiverNames;
4749
private $resetServicesListener;
50+
private $busIds;
4851

49-
public function __construct(RoutableMessageBus $routableBus, ContainerInterface $receiverLocator, EventDispatcherInterface $eventDispatcher, LoggerInterface $logger = null, array $receiverNames = [], ResetServicesListener $resetServicesListener = null)
52+
public function __construct(RoutableMessageBus $routableBus, ContainerInterface $receiverLocator, EventDispatcherInterface $eventDispatcher, LoggerInterface $logger = null, array $receiverNames = [], ResetServicesListener $resetServicesListener = null, array $busIds = [])
5053
{
5154
$this->routableBus = $routableBus;
5255
$this->receiverLocator = $receiverLocator;
5356
$this->eventDispatcher = $eventDispatcher;
5457
$this->logger = $logger;
5558
$this->receiverNames = $receiverNames;
5659
$this->resetServicesListener = $resetServicesListener;
60+
$this->busIds = $busIds;
5761

5862
parent::__construct();
5963
}
@@ -223,6 +227,19 @@ protected function execute(InputInterface $input, OutputInterface $output)
223227
return 0;
224228
}
225229

230+
public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
231+
{
232+
if ($input->mustSuggestArgumentValuesFor('receivers')) {
233+
$suggestions->suggestValues(array_diff($this->receiverNames, array_diff($input->getArgument('receivers'), [$input->getCompletionValue()])));
234+
235+
return;
236+
}
237+
238+
if ($input->mustSuggestOptionValuesFor('bus')) {
239+
$suggestions->suggestValues($this->busIds);
240+
}
241+
}
242+
226243
private function convertToBytes(string $memoryLimit): int
227244
{
228245
$memoryLimit = strtolower($memoryLimit);

src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass;
1818
use Symfony\Component\DependencyInjection\ContainerBuilder;
1919
use Symfony\Component\DependencyInjection\Definition;
20+
use Symfony\Component\DependencyInjection\Exception\OutOfBoundsException;
2021
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
2122
use Symfony\Component\DependencyInjection\Reference;
2223
use Symfony\Component\Messenger\Handler\HandlerDescriptor;
@@ -309,6 +310,11 @@ private function registerReceivers(ContainerBuilder $container, array $busIds)
309310
}
310311

311312
$consumeCommandDefinition->replaceArgument(4, array_values($receiverNames));
313+
try {
314+
$consumeCommandDefinition->replaceArgument(6, $busIds);
315+
} catch (OutOfBoundsException $e) {
316+
// ignore to preserve compatibility with symfony/framework-bundle < 5.4
317+
}
312318
}
313319

314320
if ($container->hasDefinition('console.command.messenger_setup_transports')) {

src/Symfony/Component/Messenger/Tests/Command/ConsumeMessagesCommandTest.php

Lines changed: 22 additions & 0 deletions
B41A
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\Console\Application;
16+
use Symfony\Component\Console\Tester\CommandCompletionTester;
1617
use Symfony\Component\Console\Tester\CommandTester;
1718
use Symfony\Component\DependencyInjection\ContainerInterface;
1819
use Symfony\Component\DependencyInjection\ServiceLocator;
@@ -150,4 +151,25 @@ public function testRunWithResetServicesOption(bool $shouldReset)
150151
$tester->assertCommandIsSuccessful();
151152
$this->assertStringContainsString('[OK] Consuming messages from transports "dummy-receiver"', $tester->getDisplay());
152153
}
154+
155+
/**
156+
* @dataProvider provideCompletionSuggestions
157+
*/
158+
public function testComplete(array $input, array $expectedSuggestions)
159+
{
160+
$bus = $this->createMock(RoutableMessageBus::class);
161+
$receiverLocator = $this->createMock(ContainerInterface::class);
162+
$command = new ConsumeMessagesCommand($bus, $receiverLocator, new EventDispatcher(), null, ['async', 'async_high', 'failed'], null, ['messenger.bus.default']);
163+
$tester = new CommandCompletionTester($command);
164+
$suggestions = $tester->complete($input);
165+
$this->assertSame($expectedSuggestions, $suggestions);
166+
}
167+
168+
public function provideCompletionSuggestions()
169+
{
170+
yield 'receiver' => [[''], ['async', 'async_high', 'failed']];
171+
yield 'receiver (value)' => [['async'], ['async', 'async_high', 'failed']];
172+
yield 'receiver (no repeat)' => [['async', ''], ['async_high', 'failed']];
173+
yield 'option --bus' => [['--bus', ''], ['messenger.bus.default']];
174+
}
153175
}

0 commit comments

Comments
 (0)
0