|
9 | 9 | use Illuminate\Events\Dispatcher;
|
10 | 10 | use Illuminate\Queue\QueueManager;
|
11 | 11 | use Illuminate\Support\Testing\Fakes\QueueFake;
|
| 12 | +use Laravel\SerializableClosure\SerializableClosure; |
12 | 13 | use Mockery as m;
|
13 | 14 | use PHPUnit\Framework\TestCase;
|
14 | 15 |
|
@@ -197,6 +198,82 @@ public function testQueuePropagateTries()
|
197 | 198 | });
|
198 | 199 | }
|
199 | 200 |
|
| 201 | + public function testQueuePropagateMessageGroupProperty() |
| 202 | + { |
| 203 | + $d = new Dispatcher; |
| 204 | + |
| 205 | + $fakeQueue = new QueueFake(new Container); |
| 206 | + |
| 207 | + $d->setQueueResolver(function () use ($fakeQueue) { |
| 208 | + return $fakeQueue; |
| 209 | + }); |
| 210 | + |
| 211 | + $d->listen('some.event', TestDispatcherWithMessageGroupProperty::class.'@handle'); |
| 212 | + $d->dispatch('some.event', ['foo', 'bar']); |
| 213 | + |
| 214 | + $fakeQueue->assertPushed(CallQueuedListener::class, function ($job) { |
| 215 | + return $job->messageGroup === 'group-property'; |
| 216 | + }); |
| 217 | + } |
| 218 | + |
| 219 | + public function testQueuePropagateMessageGroupMethodOverProperty() |
| 220 | + { |
| 221 | + $d = new Dispatcher; |
| 222 | + |
| 223 | + $fakeQueue = new QueueFake(new Container); |
| 224 | + |
| 225 | + $d->setQueueResolver(function () use ($fakeQueue) { |
| 226 | + return $fakeQueue; |
| 227 | + }); |
| 228 | + |
| 229 | + $d->listen('some.event', TestDispatcherWithMessageGroupMethod::class.'@handle'); |
| 230 | + $d->dispatch('some.event', ['foo', 'bar']); |
| 231 | + |
| 232 | + $fakeQueue->assertPushed(CallQueuedListener::class, function ($job) { |
| 233 | + return $job->messageGroup === 'group-method'; |
| 234 | + }); |
| 235 | + } |
| 236 | + |
| 237 | + public function testQueuePropagateDeduplicationIdMethod() |
| 238 | + { |
| 239 | + $d = new Dispatcher; |
| 240 | + |
| 241 | + $fakeQueue = new QueueFake(new Container); |
| 242 | + |
| 243 | + $d->setQueueResolver(function () use ($fakeQueue) { |
| 244 | + return $fakeQueue; |
| 245 | + }); |
| 246 | + |
| 247 | + $d->listen('some.event', TestDispatcherWithDeduplicationIdMethod::class.'@handle'); |
| 248 | + $d->dispatch('some.event', ['foo', 'bar']); |
| 249 | + |
| 250 | + $fakeQueue->assertPushed(CallQueuedListener::class, function ($job) { |
| 251 | + $this->assertInstanceOf(SerializableClosure::class, $job->deduplicator); |
| 252 | + |
| 253 | + return is_callable($job->deduplicator) && call_user_func($job->deduplicator, '', null) === 'deduplication-id-method'; |
| 254 | + }); |
| 255 | + } |
| 256 | + |
| 257 | + public function testQueuePropagateDeduplicatorMethodOverDeduplicationIdMethod() |
| 258 | + { |
| 259 | + $d = new Dispatcher; |
| 260 | + |
| 261 | + $fakeQueue = new QueueFake(new Container); |
| 262 | + |
| 263 | + $d->setQueueResolver(function () use ($fakeQueue) { |
| 264 | + return $fakeQueue; |
| 265 | + }); |
| 266 | + |
| 267 | + $d->listen('some.event', TestDispatcherWithDeduplicatorMethod::class.'@handle'); |
| 268 | + $d->dispatch('some.event', ['foo', 'bar']); |
| 269 | + |
| 270 | + $fakeQueue->assertPushed(CallQueuedListener::class, function ($job) { |
| 271 | + $this->assertInstanceOf(SerializableClosure::class, $job->deduplicator); |
| 272 | + |
| 273 | + return is_callable($job->deduplicator) && call_user_func($job->deduplicator, '', null) === 'deduplicator-method'; |
| 274 | + }); |
| 275 | + } |
| 276 | + |
200 | 277 | public function testQueuePropagateMiddleware()
|
201 | 278 | {
|
202 | 279 | $d = new Dispatcher;
|
@@ -323,6 +400,62 @@ public function handle()
|
323 | 400 | }
|
324 | 401 | }
|
325 | 402 |
|
| 403 | +class TestDispatcherWithMessageGroupProperty implements ShouldQueue |
| 404 | +{ |
| 405 | + public $messageGroup = 'group-property'; |
| 406 | + |
| 407 | + public function handle() |
| 408 | + { |
| 409 | + // |
| 410 | + } |
| 411 | +} |
| 412 | + |
| 413 | +class TestDispatcherWithMessageGroupMethod implements ShouldQueue |
| 414 | +{ |
| 415 | + public $messageGroup = 'group-property'; |
| 416 | + |
| 417 | + public function handle() |
| 418 | + { |
| 419 | + // |
| 420 | + } |
| 421 | + |
| 422 | + public function messageGroup($event) |
| 423 | + { |
| 424 | + return 'group-method'; |
| 425 | + } |
| 426 | +} |
| 427 | + |
| 428 | +class TestDispatcherWithDeduplicationIdMethod implements ShouldQueue |
| 429 | +{ |
| 430 | + public function handle() |
| 431 | + { |
| 432 | + // |
| 433 | + } |
| 434 | + |
| 435 | + public function deduplicationId($payload, $queue) |
| 436 | + { |
| 437 | + return 'deduplication-id-method'; |
| 438 | + } |
| 439 | +} |
| 440 | + |
| 441 | +class TestDispatcherWithDeduplicatorMethod implements ShouldQueue |
| 442 | +{ |
| 443 | + public function handle() |
| 444 | + { |
| 445 | + // |
| 446 | + } |
| 447 | + |
| 448 | + public function deduplicationId($payload, $queue) |
| 449 | + { |
| 450 | + return 'deduplication-id-method'; |
| 451 | + } |
| 452 | + |
| 453 | + public function deduplicator($event) |
| 454 | + { |
| 455 | + return fn ($payload, $queue) => 'deduplicator-method'; |
| 456 | + } |
| 457 | +} |
| 458 | + |
326 | 459 | class TestDispatcherMiddleware implements ShouldQueue
|
327 | 460 | {
|
328 | 461 | public function middleware($a, $b)
|
|
0 commit comments