Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Passthru missing methods on KafkaFake for macro accessibility #246

Merged
merged 11 commits into from
Feb 14, 2024
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());
}
}
Loading