Skip to content

Commit f9c9ca0

Browse files
committed
[Messenger] Move data collector & command into the component
1 parent fb172ca commit f9c9ca0

File tree

6 files changed

+148
-12
lines changed

6 files changed

+148
-12
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
<tag name="console.command" command="debug:event-dispatcher" />
7070
</service>
7171

72-
<service id="console.command.messenger_consume_messages" class="Symfony\Bundle\FrameworkBundle\Command\MessengerConsumeMessagesCommand">
72+
<service id="console.command.messenger_consume_messages" class="Symfony\Component\Messenger\Command\ConsumeMessagesCommand">
7373
<argument type="service" id="message_bus" />
7474
<argument type="service" id="messenger.receiver_locator" />
7575

src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
<tag name="monolog.logger" channel="messenger" />
5959
</service>
6060

61-
<service id="data_collector.messenger" class="Symfony\Bundle\FrameworkBundle\DataCollector\MessengerDataCollector">
61+
<service id="data_collector.messenger" class="Symfony\Component\Messenger\DataCollector\MessengerDataCollector">
6262
<tag name="data_collector" template="@WebProfiler/Collector/messenger.html.twig" id="messenger" priority="100" />
6363
<tag name="message_bus_middleware" />
6464
</service>

src/Symfony/Bundle/FrameworkBundle/Command/MessengerConsumeMessagesCommand.php renamed to src/Symfony/Component/Messenger/Command/ConsumeMessagesCommand.php

+4-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* file that was distributed with this source code.
1010
*/
1111

12-
namespace Symfony\Bundle\FrameworkBundle\Command;
12+
namespace Symfony\Component\Messenger\Command;
1313

1414
use Psr\Container\ContainerInterface;
1515
use Symfony\Component\Console\Command\Command;
@@ -24,8 +24,10 @@
2424

2525
/**
2626
* @author Samuel Roze <samuel.roze@gmail.com>
27+
*
28+
* @experimental in 4.1
2729
*/
28-
class MessengerConsumeMessagesCommand extends Command
30+
class ConsumeMessagesCommand extends Command
2931
{
3032
protected static $defaultName = 'messenger:consume-messages';
3133

src/Symfony/Bundle/FrameworkBundle/DataCollector/MessengerDataCollector.php renamed to src/Symfony/Component/Messenger/DataCollector/MessengerDataCollector.php

+9-7
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* file that was distributed with this source code.
1010
*/
1111

12-
namespace Symfony\Bundle\FrameworkBundle\DataCollector;
12+
namespace Symfony\Component\Messenger\DataCollector;
1313

1414
use Symfony\Component\HttpFoundation\Request;
1515
use Symfony\Component\HttpFoundation\Response;
@@ -18,6 +18,8 @@
1818

1919
/**
2020
* @author Samuel Roze <samuel.roze@gmail.com>
21+
*
22+
* @experimental in 4.1
2123
*/
2224
class MessengerDataCollector extends DataCollector implements MiddlewareInterface
2325
{
@@ -26,7 +28,7 @@ class MessengerDataCollector extends DataCollector implements MiddlewareInterfac
2628
*/
2729
public function collect(Request $request, Response $response, \Exception $exception = null)
2830
{
29-
return $this->data;
31+
// noop
3032
}
3133

3234
/**
@@ -61,25 +63,25 @@ public function handle($message, callable $next)
6163
try {
6264
$result = $next($message);
6365

64-
if (is_object($result)) {
66+
if (\is_object($result)) {
6567
$debugRepresentation['result'] = array(
66-
'type' => get_class($result),
68+
'type' => \get_class($result),
6769
'object' => $this->cloneVar($result),
6870
);
69-
} elseif (is_array($result)) {
71+
} elseif (\is_array($result)) {
7072
$debugRepresentation['result'] = array(
7173
'type' => 'array',
7274
'object' => $this->cloneVar($result),
7375
);
7476
} else {
7577
$debugRepresentation['result'] = array(
76-
'type' => gettype($result),
78+
'type' => \gettype($result),
7779
'value' => $result,
7880
);
7981
}
8082
} catch (\Throwable $exception) {
8183
$debugRepresentation['exception'] = array(
82-
'type' => get_class($exception),
84+
'type' => \get_class($exception),
8385
'message' => $exception->getMessage(),
8486
);
8587
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
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\Tests\DataCollector;
13+
14+
use PHPUnit\Framework\TestCase;
15+
use Symfony\Component\Messenger\DataCollector\MessengerDataCollector;
16+
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
17+
use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
18+
19+
/**
20+
* @author Maxime Steinhausser <maxime.steinhausser@gmail.com>
21+
*/
22+
class MessengerDataCollectorTest extends TestCase
23+
{
24+
use VarDumperTestTrait;
25+
26+
/**
27+
* @dataProvider getHandleTestData
28+
*/
29+
public function testHandle($returnedValue, $expected)
30+
{
31+
$collector = new MessengerDataCollector();
32+
$message = new DummyMessage('dummy message');
33+
34+
$next = $this->createPartialMock(\stdClass::class, array('__invoke'));
35+
$next->expects($this->once())->method('__invoke')->with($message)->willReturn($returnedValue);
36+
37+
$this->assertSame($returnedValue, $collector->handle($message, $next));
38+
39+
$messages = $collector->getMessages();
40+
$this->assertCount(1, $messages);
41+
42+
$this->assertDumpMatchesFormat($expected, $messages[0]);
43+
}
44+
45+
public function getHandleTestData()
46+
{
47+
$messageDump = <<<DUMP
48+
"message" => array:2 [
49+
"type" => "Symfony\Component\Messenger\Tests\Fixtures\DummyMessage"
50+
"object" => Symfony\Component\VarDumper\Cloner\Data {%A
51+
%A+class: "Symfony\Component\Messenger\Tests\Fixtures\DummyMessage"%A
52+
}
53+
]
54+
DUMP;
55+
56+
yield 'no returned value' => array(
57+
null,
58+
<<<DUMP
59+
array:2 [
60+
$messageDump
61+
"result" => array:2 [
62+
"type" => "NULL"
63+
"value" => null
64+
]
65+
]
66+
DUMP
67+
);
68+
69+
yield 'scalar returned value' => array(
70+
'returned value',
71+
<<<DUMP
72+
array:2 [
73+
$messageDump
74+
"result" => array:2 [
75+
"type" => "string"
76+
"value" => "returned value"
77+
]
78+
]
79+
DUMP
80+
);
81+
82+
yield 'array returned value' => array(
83+
array('returned value'),
84+
<<<DUMP
85+
array:2 [
86+
$messageDump
87+
"result" => array:2 [
88+
"type" => "array"
89+
"object" => Symfony\Component\VarDumper\Cloner\Data {%A
90+
]
91+
]
92+
DUMP
93+
);
94+
}
95+
96+
public function testHandleWithException()
97+
{
98+
$collector = new MessengerDataCollector();
99+
$message = new DummyMessage('dummy message');
100+
101+
$expectedException = new \RuntimeException('foo');
102+
$next = $this->createPartialMock(\stdClass::class, array('__invoke'));
103+
$next->expects($this->once())->method('__invoke')->with($message)->willThrowException($expectedException);
104+
105+
try {
106+
$collector->handle($message, $next);
107+
} catch (\Throwable $actualException) {
108+
$this->assertSame($expectedException, $actualException);
109+
}
110+
111+
$messages = $collector->getMessages();
112+
$this->assertCount(1, $messages);
113+
114+
$this->assertDumpMatchesFormat(<<<DUMP
115+
array:2 [
116+
"message" => array:2 [
117+
"type" => "Symfony\Component\Messenger\Tests\Fixtures\DummyMessage"
118+
"object" => Symfony\Component\VarDumper\Cloner\Data {%A
119+
%A+class: "Symfony\Component\Messenger\Tests\Fixtures\DummyMessage"%A
120+
}
121+
]
122+
"exception" => array:2 [
123+
"type" => "RuntimeException"
124+
"message" => "foo"
125+
]
126+
]
127+
DUMP
128+
, $messages[0]);
129+
}
130+
}

src/Symfony/Component/Messenger/composer.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
"require-dev": {
2222
"symfony/serializer": "~3.4|~4.0",
2323
"symfony/dependency-injection": "~3.4.6|~4.0",
24-
"symfony/property-access": "~3.4|~4.0"
24+
"symfony/http-kernel": "~3.4|~4.0",
25+
"symfony/property-access": "~3.4|~4.0",
26+
"symfony/var-dumper": "~3.4|~4.0"
2527
},
2628
"suggest": {
2729
"sroze/enqueue-bridge": "For using the php-enqueue library as an adapter."

0 commit comments

Comments
 (0)