PQueueConsumerSimpleTest.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace Test\Michel\PQueue;
  3. use Michel\UniTester\TestCase;
  4. use Michel\PQueue\PQueueConsumer;
  5. use LogicException;
  6. use Test\Michel\PQueue\Extra\TestMessage;
  7. use Test\Michel\PQueue\Extra\TestMessageHandler;
  8. class PQueueConsumerSimpleTest extends TestCase
  9. {
  10. public function execute(): void
  11. {
  12. $this->testConsumeCallsHandler();
  13. $this->testConsumeThrowsExceptionIfNoHandlerFound();
  14. $this->testConstructorValidatesHandlers();
  15. }
  16. private function testConsumeCallsHandler()
  17. {
  18. // Arrange
  19. $message = new TestMessage();
  20. $handlerCalled = false;
  21. $mockHandler = new class extends TestMessageHandler {
  22. public $called = false;
  23. public function __invoke(TestMessage $message) {
  24. $this->called = true;
  25. }
  26. };
  27. $consumer = new PQueueConsumer([
  28. TestMessage::class => $mockHandler
  29. ]);
  30. // Act
  31. $consumer->consume($message);
  32. // Assert
  33. $this->assertTrue($mockHandler->called, 'Handler should have been called.');
  34. }
  35. private function testConsumeThrowsExceptionIfNoHandlerFound()
  36. {
  37. // Arrange
  38. $message = new TestMessage();
  39. $consumer = new PQueueConsumer([]); // Consumer with no handlers
  40. // Assert
  41. $this->expectException(\RuntimeException::class, function () use ($consumer, $message) {
  42. // Act
  43. $consumer->consume($message);
  44. });
  45. }
  46. private function testConstructorValidatesHandlers()
  47. {
  48. // Test invalid handler (not an object)
  49. $this->expectException(\InvalidArgumentException::class, function () {
  50. new PQueueConsumer([TestMessage::class => 'not_an_object']);
  51. });
  52. // Test invalid handler (no __invoke)
  53. $this->expectException(\InvalidArgumentException::class, function () {
  54. new PQueueConsumer([TestMessage::class => new \stdClass()]);
  55. });
  56. // Test unknown payload class
  57. $this->expectException(\InvalidArgumentException::class, function () {
  58. $mockHandler = new class { public function __invoke(TestMessage $message) {} };
  59. new PQueueConsumer(['NonExistentClass' => $mockHandler]);
  60. });
  61. }
  62. protected function setUp(): void
  63. {
  64. // TODO: Implement setUp() method.
  65. }
  66. protected function tearDown(): void
  67. {
  68. // TODO: Implement tearDown() method.
  69. }
  70. }