|
18 | 18 | use Yiisoft\Queue\Middleware\FailureHandling\MiddlewareFactoryFailureInterface; |
19 | 19 | use Yiisoft\Queue\QueueInterface; |
20 | 20 | use Yiisoft\Queue\Tests\App\FakeHandler; |
| 21 | +use Yiisoft\Queue\Tests\App\StaticMessageHandler; |
21 | 22 | use Yiisoft\Queue\Tests\TestCase; |
22 | 23 | use Yiisoft\Queue\Worker\Worker; |
23 | 24 |
|
@@ -199,4 +200,57 @@ private function createWorkerByParams( |
199 | 200 | new FailureMiddlewareDispatcher($this->createMock(MiddlewareFactoryFailureInterface::class), []), |
200 | 201 | ); |
201 | 202 | } |
| 203 | + |
| 204 | + public function testHandlerNotFoundInContainer(): void |
| 205 | + { |
| 206 | + $message = new Message('nonexistent', ['test-data']); |
| 207 | + $logger = new SimpleLogger(); |
| 208 | + $container = new SimpleContainer(); |
| 209 | + $handlers = []; |
| 210 | + |
| 211 | + $queue = $this->createMock(QueueInterface::class); |
| 212 | + $worker = $this->createWorkerByParams($handlers, $logger, $container); |
| 213 | + |
| 214 | + $this->expectException(\RuntimeException::class); |
| 215 | + $this->expectExceptionMessage('Queue handler with name "nonexistent" does not exist'); |
| 216 | + $worker->process($message, $queue); |
| 217 | + } |
| 218 | + |
| 219 | + public function testHandlerInContainerNotImplementingInterface(): void |
| 220 | + { |
| 221 | + $message = new Message('invalid', ['test-data']); |
| 222 | + $logger = new SimpleLogger(); |
| 223 | + $container = new SimpleContainer([ |
| 224 | + 'invalid' => new class () { |
| 225 | + public function handle(): void |
| 226 | + { |
| 227 | + } |
| 228 | + }, |
| 229 | + ]); |
| 230 | + $handlers = []; |
| 231 | + |
| 232 | + $queue = $this->createMock(QueueInterface::class); |
| 233 | + $worker = $this->createWorkerByParams($handlers, $logger, $container); |
| 234 | + |
| 235 | + $this->expectException(\RuntimeException::class); |
| 236 | + $this->expectExceptionMessage('Queue handler with name "invalid" does not exist'); |
| 237 | + $worker->process($message, $queue); |
| 238 | + } |
| 239 | + |
| 240 | + public function testStaticMethodHandler(): void |
| 241 | + { |
| 242 | + $message = new Message('static-handler', ['test-data']); |
| 243 | + $logger = new SimpleLogger(); |
| 244 | + $container = new SimpleContainer(); |
| 245 | + $handlers = [ |
| 246 | + 'static-handler' => StaticMessageHandler::handle(...), |
| 247 | + ]; |
| 248 | + |
| 249 | + $queue = $this->createMock(QueueInterface::class); |
| 250 | + $worker = $this->createWorkerByParams($handlers, $logger, $container); |
| 251 | + |
| 252 | + StaticMessageHandler::$wasHandled = false; |
| 253 | + $worker->process($message, $queue); |
| 254 | + $this->assertTrue(StaticMessageHandler::$wasHandled); |
| 255 | + } |
202 | 256 | } |
0 commit comments