Skip to content

Commit

Permalink
Passthru missing methods on KafkaFake for macro accessibility (#246)
Browse files Browse the repository at this point in the history
* Introduce new interface

* Make Kafka implement the new interface

* Forward calls to root instance

* Pass root instance to fake

* Bind new interface

* Add tests

* Improve tests

* Remove unecessary call to kafka::fake

* Use short closure syntax
  • Loading branch information
mateusjunges authored Feb 14, 2024
1 parent 73e1fce commit 2cb0482
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 5 deletions.
8 changes: 8 additions & 0 deletions src/Contracts/KafkaManager.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php declare(strict_types=1);

namespace Junges\Kafka\Contracts;

interface KafkaManager extends ConsumeMessagesFromKafka, MessagePublisher
{

}
2 changes: 1 addition & 1 deletion src/Facades/Kafka.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class Kafka extends Facade
/** Replace the bound instance with a fake. */
public static function fake(): KafkaFake
{
static::swap($fake = new KafkaFake());
static::swap($fake = new KafkaFake(static::getFacadeRoot()));

return $fake;
}
Expand Down
3 changes: 2 additions & 1 deletion src/Kafka.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@
use Illuminate\Support\Traits\Macroable;
use Junges\Kafka\Consumers\ConsumerBuilder;
use Junges\Kafka\Contracts\ConsumeMessagesFromKafka;
use Junges\Kafka\Contracts\KafkaManager;
use Junges\Kafka\Contracts\MessageProducer;
use Junges\Kafka\Contracts\MessagePublisher;
use Junges\Kafka\Producers\ProducerBuilder;

class Kafka implements MessagePublisher, ConsumeMessagesFromKafka
class Kafka implements KafkaManager
{
use Macroable;

Expand Down
3 changes: 3 additions & 0 deletions src/Providers/LaravelKafkaServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Junges\Kafka\Console\Commands\RestartConsumersCommand;
use Junges\Kafka\Contracts\ConsumeMessagesFromKafka;
use Junges\Kafka\Contracts\ConsumerMessage;
use Junges\Kafka\Contracts\KafkaManager;
use Junges\Kafka\Contracts\Logger as LoggerContract;
use Junges\Kafka\Contracts\MessageDeserializer;
use Junges\Kafka\Contracts\MessagePublisher;
Expand Down Expand Up @@ -47,6 +48,8 @@ public function register()

$this->app->bind(ConsumeMessagesFromKafka::class, Kafka::class);

$this->app->bind(KafkaManager::class, Kafka::class);

$this->app->singleton(LoggerContract::class, Logger::class);
}

Expand Down
24 changes: 22 additions & 2 deletions src/Support/Testing/Fakes/KafkaFake.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

Expand Down Expand Up @@ -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.');
}
Expand Down Expand Up @@ -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);
}
}
12 changes: 11 additions & 1 deletion tests/KafkaFakeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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());
}
}

0 comments on commit 2cb0482

Please sign in to comment.