16
16
use Symfony \Component \Messenger \Asynchronous \Routing \SenderLocatorInterface ;
17
17
use Symfony \Component \Messenger \Asynchronous \Transport \ReceivedMessage ;
18
18
use Symfony \Component \Messenger \Envelope ;
19
+ use Symfony \Component \Messenger \Tests \Asynchronous \Routing \ChildDummyMessage ;
19
20
use Symfony \Component \Messenger \Tests \Fixtures \DummyMessage ;
21
+ use Symfony \Component \Messenger \Tests \Fixtures \DummyMessageInterface ;
20
22
use Symfony \Component \Messenger \Transport \SenderInterface ;
21
23
22
24
class SendMessageMiddlewareTest extends TestCase
@@ -27,9 +29,7 @@ public function testItSendsTheMessageToAssignedSender()
27
29
$ sender = $ this ->getMockBuilder (SenderInterface::class)->getMock ();
28
30
$ next = $ this ->createPartialMock (\stdClass::class, array ('__invoke ' ));
29
31
30
- $ middleware = new SendMessageMiddleware (new InMemorySenderLocator (array (
31
- $ sender ,
32
- )));
32
+ $ middleware = new SendMessageMiddleware (new InMemorySenderLocator ($ sender ));
33
33
34
34
$ sender ->expects ($ this ->once ())->method ('send ' )->with (Envelope::wrap ($ message ));
35
35
$ next ->expects ($ this ->never ())->method ($ this ->anything ());
@@ -43,26 +43,71 @@ public function testItSendsTheMessageToAssignedSenderWithPreWrappedMessage()
43
43
$ sender = $ this ->getMockBuilder (SenderInterface::class)->getMock ();
44
44
$ next = $ this ->createPartialMock (\stdClass::class, array ('__invoke ' ));
45
45
46
- $ middleware = new SendMessageMiddleware (new InMemorySenderLocator (array (
47
- $ sender ,
48
- )));
46
+ $ middleware = new SendMessageMiddleware (new InMemorySenderLocator ($ sender ));
49
47
50
48
$ sender ->expects ($ this ->once ())->method ('send ' )->with ($ envelope );
51
49
$ next ->expects ($ this ->never ())->method ($ this ->anything ());
52
50
53
51
$ middleware ->handle ($ envelope , $ next );
54
52
}
55
53
56
- public function testItAlsoCallsTheNextMiddlewareIfASenderIsNull ()
54
+ public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageClass ()
57
55
{
58
56
$ message = new DummyMessage ('Hey ' );
59
57
$ sender = $ this ->getMockBuilder (SenderInterface::class)->getMock ();
60
58
$ next = $ this ->createPartialMock (\stdClass::class, array ('__invoke ' ));
61
59
62
- $ middleware = new SendMessageMiddleware (new InMemorySenderLocator (array (
63
- $ sender ,
64
- null ,
65
- )));
60
+ $ middleware = new SendMessageMiddleware (new InMemorySenderLocator ($ sender ), array (
61
+ DummyMessage::class => true ,
62
+ ));
63
+
64
+ $ sender ->expects ($ this ->once ())->method ('send ' )->with (Envelope::wrap ($ message ));
65
+ $ next ->expects ($ this ->once ())->method ($ this ->anything ());
66
+
67
+ $ middleware ->handle ($ message , $ next );
68
+ }
69
+
70
+ public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageParentClass ()
71
+ {
72
+ $ message = new ChildDummyMessage ('Hey ' );
73
+ $ sender = $ this ->getMockBuilder (SenderInterface::class)->getMock ();
74
+ $ next = $ this ->createPartialMock (\stdClass::class, array ('__invoke ' ));
75
+
76
+ $ middleware = new SendMessageMiddleware (new InMemorySenderLocator ($ sender ), array (
77
+ DummyMessage::class => true ,
78
+ ));
79
+
80
+ $ sender ->expects ($ this ->once ())->method ('send ' )->with (Envelope::wrap ($ message ));
81
+ $ next ->expects ($ this ->once ())->method ($ this ->anything ());
82
+
83
+ $ middleware ->handle ($ message , $ next );
84
+ }
85
+
86
+ public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageInterface ()
87
+ {
88
+ $ message = new DummyMessage ('Hey ' );
89
+ $ sender = $ this ->getMockBuilder (SenderInterface::class)->getMock ();
90
+ $ next = $ this ->createPartialMock (\stdClass::class, array ('__invoke ' ));
91
+
92
+ $ middleware = new SendMessageMiddleware (new InMemorySenderLocator ($ sender ), array (
93
+ DummyMessageInterface::class => true ,
94
+ ));
95
+
96
+ $ sender ->expects ($ this ->once ())->method ('send ' )->with (Envelope::wrap ($ message ));
97
+ $ next ->expects ($ this ->once ())->method ($ this ->anything ());
98
+
99
+ $ middleware ->handle ($ message , $ next );
100
+ }
101
+
102
+ public function testItAlsoCallsTheNextMiddlewareBasedOnWildcard ()
103
+ {
104
+ $ message = new DummyMessage ('Hey ' );
105
+ $ sender = $ this ->getMockBuilder (SenderInterface::class)->getMock ();
106
+ $ next = $ this ->createPartialMock (\stdClass::class, array ('__invoke ' ));
107
+
108
+ $ middleware = new SendMessageMiddleware (new InMemorySenderLocator ($ sender ), array (
109
+ '* ' => true ,
110
+ ));
66
111
67
112
$ sender ->expects ($ this ->once ())->method ('send ' )->with (Envelope::wrap ($ message ));
68
113
$ next ->expects ($ this ->once ())->method ($ this ->anything ());
@@ -75,7 +120,7 @@ public function testItCallsTheNextMiddlewareWhenNoSenderForThisMessage()
75
120
$ message = new DummyMessage ('Hey ' );
76
121
$ next = $ this ->createPartialMock (\stdClass::class, array ('__invoke ' ));
77
122
78
- $ middleware = new SendMessageMiddleware (new InMemorySenderLocator (array () ));
123
+ $ middleware = new SendMessageMiddleware (new InMemorySenderLocator (null ));
79
124
80
125
$ next ->expects ($ this ->once ())->method ($ this ->anything ());
81
126
@@ -89,9 +134,7 @@ public function testItSkipsReceivedMessages()
89
134
$ sender = $ this ->getMockBuilder (SenderInterface::class)->getMock ();
90
135
$ next = $ this ->createPartialMock (\stdClass::class, array ('__invoke ' ));
91
136
92
- $ middleware = new SendMessageMiddleware (new InMemorySenderLocator (array (
93
- $ sender ,
94
- )));
137
+ $ middleware = new SendMessageMiddleware (new InMemorySenderLocator ($ sender ));
95
138
96
139
$ sender ->expects ($ this ->never ())->method ('send ' );
97
140
$ next ->expects ($ this ->once ())->method ('__invoke ' )->with ($ envelope );
@@ -102,15 +145,15 @@ public function testItSkipsReceivedMessages()
102
145
103
146
class InMemorySenderLocator implements SenderLocatorInterface
104
147
{
105
- private $ senders ;
148
+ private $ sender ;
106
149
107
- public function __construct (array $ senders )
150
+ public function __construct (? SenderInterface $ sender )
108
151
{
109
- $ this ->senders = $ senders ;
152
+ $ this ->sender = $ sender ;
110
153
}
111
154
112
- public function getSendersForMessage ($ message ): array
155
+ public function getSenderForMessage ($ message ): ? SenderInterface
113
156
{
114
- return $ this ->senders ;
157
+ return $ this ->sender ;
115
158
}
116
159
}
0 commit comments