Skip to content

Commit

Permalink
Merge pull request #480 from tienvx/add-command-count-messages
Browse files Browse the repository at this point in the history
Add command count messages
  • Loading branch information
tienvx committed May 17, 2020
2 parents 178c233 + 7a7c249 commit 20964c4
Show file tree
Hide file tree
Showing 20 changed files with 139 additions and 16 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ All you have to do:

## Requirements

* PHP 7.3 / 7.4
* Symfony 5.0
* PHP 7.2 / 7.3 / 7.4
* Symfony 4.4 / 5.0
* See also the `require` section of [composer.json](composer.json)

## Installation
Expand Down
65 changes: 65 additions & 0 deletions src/Command/MessagesCountCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?php

namespace Tienvx\Bundle\MbtBundle\Command;

use Psr\Container\ContainerInterface;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Exception\RuntimeException;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Messenger\Transport\Receiver\MessageCountAwareInterface;

class MessagesCountCommand extends Command
{
protected static $defaultName = 'mbt:messages:count';

private $receiverLocator;

public function __construct(ContainerInterface $receiverLocator)
{
$this->receiverLocator = $receiverLocator;

parent::__construct();
}

/**
* {@inheritdoc}
*/
protected function configure(): void
{
$this
->setDefinition([
new InputArgument('receiver', InputArgument::REQUIRED, 'Name of the receiver/transport to count', null),
])
->setDescription('Consumes messages')
->setHelp(<<<'EOF'
The <info>%command.name%</info> command count messages of a transport.
<info>php %command.full_name% <receiver-name></info>
EOF
)
;
}

/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$receiverName = $input->getArgument('receiver');
if (!$this->receiverLocator->has($receiverName)) {
throw new RuntimeException(sprintf('The receiver "%s" does not exist.', $receiverName));
}

$receiver = $this->receiverLocator->get($receiverName);

if (!$receiver instanceof MessageCountAwareInterface) {
throw new RuntimeException(sprintf('The receiver "%s" does not support count messages.', $receiverName));
}

$output->write($receiver->getMessageCount());

return 0;
}
}
2 changes: 1 addition & 1 deletion src/Message/ApplyBugTransitionMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tienvx\Bundle\MbtBundle\Message;

class ApplyBugTransitionMessage
class ApplyBugTransitionMessage implements MessageInterface
{
/**
* @var int
Expand Down
2 changes: 1 addition & 1 deletion src/Message/ApplyTaskTransitionMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tienvx\Bundle\MbtBundle\Message;

class ApplyTaskTransitionMessage
class ApplyTaskTransitionMessage implements MessageInterface
{
/**
* @var int
Expand Down
2 changes: 1 addition & 1 deletion src/Message/CaptureScreenshotsMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tienvx\Bundle\MbtBundle\Message;

class CaptureScreenshotsMessage
class CaptureScreenshotsMessage implements MessageInterface
{
/**
* @var int
Expand Down
2 changes: 1 addition & 1 deletion src/Message/CreateBugMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tienvx\Bundle\MbtBundle\Message;

class CreateBugMessage
class CreateBugMessage implements MessageInterface
{
/**
* @var string
Expand Down
2 changes: 1 addition & 1 deletion src/Message/ExecuteTaskMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tienvx\Bundle\MbtBundle\Message;

class ExecuteTaskMessage
class ExecuteTaskMessage implements MessageInterface
{
/**
* @var int
Expand Down
2 changes: 1 addition & 1 deletion src/Message/FinishReduceBugMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tienvx\Bundle\MbtBundle\Message;

class FinishReduceBugMessage
class FinishReduceBugMessage implements MessageInterface
{
/**
* @var int
Expand Down
2 changes: 1 addition & 1 deletion src/Message/FinishReduceStepsMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tienvx\Bundle\MbtBundle\Message;

class FinishReduceStepsMessage
class FinishReduceStepsMessage implements MessageInterface
{
/**
* @var int
Expand Down
7 changes: 7 additions & 0 deletions src/Message/MessageInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

namespace Tienvx\Bundle\MbtBundle\Message;

interface MessageInterface
{
}
2 changes: 1 addition & 1 deletion src/Message/ReduceBugMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tienvx\Bundle\MbtBundle\Message;

class ReduceBugMessage
class ReduceBugMessage implements MessageInterface
{
/**
* @var int
Expand Down
2 changes: 1 addition & 1 deletion src/Message/ReduceStepsMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tienvx\Bundle\MbtBundle\Message;

class ReduceStepsMessage
class ReduceStepsMessage implements MessageInterface
{
/**
* @var int
Expand Down
2 changes: 1 addition & 1 deletion src/Message/RemoveScreenshotsMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tienvx\Bundle\MbtBundle\Message;

class RemoveScreenshotsMessage
class RemoveScreenshotsMessage implements MessageInterface
{
/**
* @var int
Expand Down
2 changes: 1 addition & 1 deletion src/Message/ReportBugMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tienvx\Bundle\MbtBundle\Message;

class ReportBugMessage
class ReportBugMessage implements MessageInterface
{
/**
* @var int
Expand Down
2 changes: 1 addition & 1 deletion src/Message/TestBugMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tienvx\Bundle\MbtBundle\Message;

class TestBugMessage
class TestBugMessage implements MessageInterface
{
/**
* @var int
Expand Down
2 changes: 1 addition & 1 deletion src/Message/TestPredefinedCaseMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tienvx\Bundle\MbtBundle\Message;

class TestPredefinedCaseMessage
class TestPredefinedCaseMessage implements MessageInterface
{
/**
* @var string
Expand Down
5 changes: 5 additions & 0 deletions src/Resources/config/services.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,10 @@
<service id="Tienvx\Bundle\MbtBundle\EventListener\EntitySubscriber">
<tag name="doctrine.event_subscriber"/>
</service>

<service id="Tienvx\Bundle\MbtBundle\Command\MessagesCountCommand">
<argument type="service" id="messenger.receiver_locator" />
<tag name="console.command" command="mbt:messages:count" />
</service>
</services>
</container>
37 changes: 37 additions & 0 deletions tests/Command/MessagesCountCommandTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

namespace Tienvx\Bundle\MbtBundle\Tests\Command;

use App\Message\CountableMessage;
use Exception;
use Symfony\Component\Console\Tester\CommandTester;
use Symfony\Component\Messenger\MessageBusInterface;

class MessagesCountCommandTest extends CommandTestCase
{
/**
* @throws Exception
*/
public function testExecute()
{
$name = 'mbt:messages:count';
$input = [
'command' => $name,
'receiver' => 'doctrine',
];

$command = $this->application->find($name);
$commandTester = new CommandTester($command);

$commandTester->execute($input);
$output = $commandTester->getDisplay();
$this->assertEquals(0, $output);

$messageBus = self::$container->get(MessageBusInterface::class);
$messageBus->dispatch(new CountableMessage());

$commandTester->execute($input);
$output = $commandTester->getDisplay();
$this->assertEquals(1, $output);
}
}
4 changes: 3 additions & 1 deletion tests/app/config/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ framework:
delay: 1000
multiplier: 2
max_delay: 0
doctrine: 'doctrine://default'
routing:
'*': memory
'Tienvx\Bundle\MbtBundle\Message\MessageInterface': memory
'App\Message\CountableMessage': doctrine
validation:
auto_mapping:
Tienvx\Bundle\MbtBundle\Entity\: []
Expand Down
7 changes: 7 additions & 0 deletions tests/app/src/Message/CountableMessage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

namespace App\Message;

class CountableMessage
{
}

0 comments on commit 20964c4

Please sign in to comment.