|
13 | 13 | use Illuminate\Support\Str; |
14 | 14 | use Illuminate\Tests\Queue\Fixtures\FakeSqsJob; |
15 | 15 | use Illuminate\Tests\Queue\Fixtures\FakeSqsJobWithDeduplication; |
| 16 | +use Illuminate\Tests\Queue\Fixtures\FakeSqsJobWithMessageGroup; |
16 | 17 | use Laravel\SerializableClosure\SerializableClosure; |
17 | 18 | use Mockery as m; |
18 | 19 | use PHPUnit\Framework\TestCase; |
@@ -363,6 +364,57 @@ public function testPushProperlyPushesJobObjectOntoSqsFifoQueue() |
363 | 364 | Str::createUuidsNormally(); |
364 | 365 | } |
365 | 366 |
|
| 367 | + public function testPushProperlyPushesJobObjectOntoSqsFifoQueueWithMessageGroupMethod() |
| 368 | + { |
| 369 | + Str::createUuidsUsing(fn () => $this->mockedDeduplicationId); |
| 370 | + |
| 371 | + $job = $this->getMockBuilder(FakeSqsJobWithMessageGroup::class)->onlyMethods(['messageGroup'])->getMock(); |
| 372 | + $job->expects($this->once())->method('messageGroup')->willReturn($this->mockedMessageGroupId); |
| 373 | + |
| 374 | + $queue = $this->getMockBuilder(SqsQueue::class)->onlyMethods(['createPayload', 'getQueue'])->setConstructorArgs([$this->sqs, $this->fifoQueueName, $this->account])->getMock(); |
| 375 | + $queue->setContainer($container = m::spy(Container::class)); |
| 376 | + $queue->expects($this->once())->method('createPayload')->with($job, $this->fifoQueueName, $this->mockedData)->willReturn($this->mockedPayload); |
| 377 | + $queue->expects($this->once())->method('getQueue')->with($this->fifoQueueName)->willReturn($this->fifoQueueUrl); |
| 378 | + $this->sqs->shouldReceive('sendMessage')->once()->with([ |
| 379 | + 'QueueUrl' => $this->fifoQueueUrl, |
| 380 | + 'MessageBody' => $this->mockedPayload, |
| 381 | + 'MessageGroupId' => $this->mockedMessageGroupId, |
| 382 | + 'MessageDeduplicationId' => $this->mockedDeduplicationId, |
| 383 | + ])->andReturn($this->mockedSendMessageResponseModel); |
| 384 | + $id = $queue->push($job, $this->mockedData, $this->fifoQueueName); |
| 385 | + $this->assertEquals($this->mockedMessageId, $id); |
| 386 | + $container->shouldHaveReceived('bound')->with('events')->twice(); |
| 387 | + |
| 388 | + Str::createUuidsNormally(); |
| 389 | + } |
| 390 | + |
| 391 | + public function testPushProperlyPushesJobObjectOntoSqsFifoQueueWithMessageGroupPropertyOverridingMethod() |
| 392 | + { |
| 393 | + Str::createUuidsUsing(fn () => $this->mockedDeduplicationId); |
| 394 | + |
| 395 | + $job = $this->getMockBuilder(FakeSqsJobWithMessageGroup::class)->onlyMethods(['messageGroup'])->getMock(); |
| 396 | + |
| 397 | + // Ensure the messageGroup method is not called when a messageGroup property is provided. |
| 398 | + $job->expects($this->never())->method('messageGroup')->willReturn('this-should-not-be-used'); |
| 399 | + $job->onGroup($this->mockedMessageGroupId); |
| 400 | + |
| 401 | + $queue = $this->getMockBuilder(SqsQueue::class)->onlyMethods(['createPayload', 'getQueue'])->setConstructorArgs([$this->sqs, $this->fifoQueueName, $this->account])->getMock(); |
| 402 | + $queue->setContainer($container = m::spy(Container::class)); |
| 403 | + $queue->expects($this->once())->method('createPayload')->with($job, $this->fifoQueueName, $this->mockedData)->willReturn($this->mockedPayload); |
| 404 | + $queue->expects($this->once())->method('getQueue')->with($this->fifoQueueName)->willReturn($this->fifoQueueUrl); |
| 405 | + $this->sqs->shouldReceive('sendMessage')->once()->with([ |
| 406 | + 'QueueUrl' => $this->fifoQueueUrl, |
| 407 | + 'MessageBody' => $this->mockedPayload, |
| 408 | + 'MessageGroupId' => $this->mockedMessageGroupId, |
| 409 | + 'MessageDeduplicationId' => $this->mockedDeduplicationId, |
| 410 | + ])->andReturn($this->mockedSendMessageResponseModel); |
| 411 | + $id = $queue->push($job, $this->mockedData, $this->fifoQueueName); |
| 412 | + $this->assertEquals($this->mockedMessageId, $id); |
| 413 | + $container->shouldHaveReceived('bound')->with('events')->twice(); |
| 414 | + |
| 415 | + Str::createUuidsNormally(); |
| 416 | + } |
| 417 | + |
366 | 418 | public function testPushProperlyPushesJobObjectOntoSqsFifoQueueWithDeduplicationId() |
367 | 419 | { |
368 | 420 | $job = $this->getMockBuilder(FakeSqsJobWithDeduplication::class)->onlyMethods(['deduplicationId'])->getMock(); |
|
0 commit comments