|
8 | 8 | use Yiisoft\Queue\QueueConsumer; |
9 | 9 | use Yiisoft\Queue\QueueConsumerInterface; |
10 | 10 | use Yiisoft\Queue\QueueProducerInterface; |
| 11 | +use Yiisoft\Queue\Cli\LoopInterface; |
11 | 12 | use Yiisoft\Queue\Message\GenericMessage; |
12 | 13 | use Yiisoft\Queue\Message\IdEnvelope; |
13 | 14 | use Yiisoft\Queue\MessageStatus; |
14 | 15 | use Yiisoft\Queue\Stubs\InMemoryAdapter; |
| 16 | +use Yiisoft\Queue\Stubs\StubLoop; |
15 | 17 | use Yiisoft\Queue\Tests\TestCase; |
16 | 18 |
|
17 | 19 | use function count; |
@@ -81,5 +83,40 @@ public function testConsumerStopsAtLimit(): void |
81 | 83 | $consumer = new QueueConsumer($this->getWorker(), $this->getLoop(), new NullLogger(), $adapter); |
82 | 84 | self::assertSame(1, $consumer->run(1)); |
83 | 85 | self::assertSame(1, $this->executionTimes); |
| 86 | + self::assertCount(1, $adapter->getMessagesList(), 'The message that hits the limit stays in the queue.'); |
| 87 | + } |
| 88 | + |
| 89 | + public function testMessageIsNotConsumedWhenLoopCannotContinue(): void |
| 90 | + { |
| 91 | + $adapter = new InMemoryAdapter(); |
| 92 | + $producer = $this->createQueue($adapter); |
| 93 | + $producer->push(new GenericMessage('simple', null)); |
| 94 | + $producer->push(new GenericMessage('simple', null)); |
| 95 | + $consumer = new QueueConsumer($this->getWorker(), new StubLoop(false), new NullLogger(), $adapter); |
| 96 | + |
| 97 | + self::assertSame(0, $consumer->run()); |
| 98 | + self::assertSame(0, $this->executionTimes); |
| 99 | + self::assertCount(2, $adapter->getMessagesList()); |
| 100 | + } |
| 101 | + |
| 102 | + public function testMessageHandledBeforeStopIsNotHandledAgain(): void |
| 103 | + { |
| 104 | + $adapter = new InMemoryAdapter(); |
| 105 | + $producer = $this->createQueue($adapter); |
| 106 | + $producer->push(new GenericMessage('simple', null)); |
| 107 | + $producer->push(new GenericMessage('simple', null)); |
| 108 | + $loop = $this->createMock(LoopInterface::class); |
| 109 | + $loop->method('canContinue')->willReturn(true, false); |
| 110 | + $consumer = new QueueConsumer($this->getWorker(), $loop, new NullLogger(), $adapter); |
| 111 | + |
| 112 | + self::assertSame(1, $consumer->run()); |
| 113 | + self::assertSame(1, $this->executionTimes); |
| 114 | + self::assertCount(1, $adapter->getMessagesList()); |
| 115 | + |
| 116 | + $consumer = new QueueConsumer($this->getWorker(), new StubLoop(), new NullLogger(), $adapter); |
| 117 | + |
| 118 | + self::assertSame(1, $consumer->run()); |
| 119 | + self::assertSame(2, $this->executionTimes, 'The message handled before the stop is not handled again.'); |
| 120 | + self::assertCount(0, $adapter->getMessagesList()); |
84 | 121 | } |
85 | 122 | } |
0 commit comments