diff --git a/src/Contracts/KafkaManager.php b/src/Contracts/KafkaManager.php new file mode 100644 index 00000000..7af4391c --- /dev/null +++ b/src/Contracts/KafkaManager.php @@ -0,0 +1,8 @@ +app->bind(ConsumeMessagesFromKafka::class, Kafka::class); + $this->app->bind(KafkaManager::class, Kafka::class); + $this->app->singleton(LoggerContract::class, Logger::class); } diff --git a/src/Support/Testing/Fakes/KafkaFake.php b/src/Support/Testing/Fakes/KafkaFake.php index 472c0e5d..114a9237 100644 --- a/src/Support/Testing/Fakes/KafkaFake.php +++ b/src/Support/Testing/Fakes/KafkaFake.php @@ -3,21 +3,30 @@ namespace Junges\Kafka\Support\Testing\Fakes; use Illuminate\Support\Collection; +use Illuminate\Support\Traits\ForwardsCalls; use JetBrains\PhpStorm\Pure; +use Junges\Kafka\Contracts\ConsumeMessagesFromKafka; use Junges\Kafka\Contracts\ConsumerMessage; +use Junges\Kafka\Contracts\KafkaManager; use Junges\Kafka\Contracts\MessagePublisher; use Junges\Kafka\Contracts\ProducerMessage; +use Junges\Kafka\Kafka; use Junges\Kafka\Message\Message; use PHPUnit\Framework\Assert as PHPUnit; class KafkaFake implements MessagePublisher { + use ForwardsCalls; + + private KafkaManager $kafka; + private array $publishedMessages = []; /** @var \Junges\Kafka\Contracts\ConsumerMessage[] */ private array $messagesToConsume = []; - public function __construct() + public function __construct(KafkaManager $kafka) { + $this->kafka = $kafka; $this->makeProducerBuilderFake(); } @@ -99,7 +108,7 @@ public function assertPublishedOnTimes(string $topic, int $times = 1, ?ProducerM } /** Assert that no messages were published. */ - public function assertNothingPublished() + public function assertNothingPublished(): void { PHPUnit::assertEmpty($this->getPublishedMessages(), 'Messages were published unexpectedly.'); } @@ -150,4 +159,15 @@ private function getPublishedMessages(): array { return $this->publishedMessages; } + + + /** + * Handle dynamic method calls to the dispatcher. + * + * @return mixed + */ + public function __call(string $method, array $parameters) + { + return $this->forwardCallTo($this->kafka, $method, $parameters); + } } diff --git a/tests/KafkaFakeTest.php b/tests/KafkaFakeTest.php index 83c5ce9e..186ab54f 100644 --- a/tests/KafkaFakeTest.php +++ b/tests/KafkaFakeTest.php @@ -6,6 +6,7 @@ use Illuminate\Support\Collection; use Illuminate\Support\Str; use Junges\Kafka\Contracts\ConsumerMessage; +use Junges\Kafka\Contracts\KafkaManager; use Junges\Kafka\Contracts\MessageConsumer; use Junges\Kafka\Facades\Kafka; use Junges\Kafka\Message\ConsumedMessage; @@ -23,7 +24,7 @@ final class KafkaFakeTest extends LaravelKafkaTestCase public function setUp(): void { parent::setUp(); - $this->fake = new KafkaFake(); + $this->fake = new KafkaFake(app(KafkaManager::class)); } public function testItStorePublishedMessagesOnArray(): void @@ -578,4 +579,13 @@ public function testStopFakeBatchConsumer(): void //should have consumed only two messages $this->assertEquals(2, $this->consumer->consumedMessagesCount()); } + + + /** @test */ + public function it_can_handle_macros(): void + { + Kafka::macro('onTopicExample', fn () => 'this is a test'); + + $this->assertSame('this is a test', $this->fake->onTopicExample()); + } }