Skip to content

Commit

Permalink
InteractsWithMailer, InteractsWithQueue. Ability to use several times
Browse files Browse the repository at this point in the history
  • Loading branch information
gam6itko committed Jun 2, 2023
1 parent fafda27 commit 5255f54
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 3 deletions.
5 changes: 5 additions & 0 deletions src/Mailer/FakeMailer.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,9 @@ public function send(MessageInterface ...$message): void
$this->messages[] = $msg;
}
}

public function clear(): void
{
$this->messages = [];
}
}
5 changes: 5 additions & 0 deletions src/Queue/FakeQueue.php
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,9 @@ public function push(string $name, array $payload = [], OptionsInterface $option

return 'job-id';
}

public function clear(): void
{
$this->jobs = [];
}
}
10 changes: 9 additions & 1 deletion src/Traits/InteractsWithMailer.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,15 @@ trait InteractsWithMailer
{
public function fakeMailer(): FakeMailer
{
$this->getContainer()->bindSingleton(
$container = $this->getContainer();
if ($container->has(MailerInterface::class)) {
$mailer = $container->get(MailerInterface::class);
if ($mailer instanceof FakeMailer) {
return $mailer;
}
}

$container->bindSingleton(
MailerInterface::class,
$mailer = new FakeMailer()
);
Expand Down
12 changes: 10 additions & 2 deletions src/Traits/InteractsWithQueue.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,17 @@ trait InteractsWithQueue
{
public function fakeQueue(): FakeQueueManager
{
$this->getContainer()->bindSingleton(
$container = $this->getContainer();
if ($container->has(QueueConnectionProviderInterface::class)) {
$manager = $container->get(QueueConnectionProviderInterface::class);
if ($manager instanceof FakeQueueManager) {
return $manager;
}
}

$container->bindSingleton(
QueueConnectionProviderInterface::class,
$manager = $this->getContainer()->get(FakeQueueManager::class)
$manager = $container->get(FakeQueueManager::class)
);

return $manager;
Expand Down
47 changes: 47 additions & 0 deletions tests/src/Traits/InteractsWithMailerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php

declare(strict_types=1);

namespace Spiral\Testing\Tests\Traits;

use PHPUnit\Framework\TestCase;
use Spiral\Core\Container;
use Spiral\Mailer\MailerInterface;
use Spiral\Testing\Mailer\FakeMailer;
use Spiral\Testing\Traits\InteractsWithMailer;

/**
* @coversDefaultClass InteractsWithMailer
*/
final class InteractsWithMailerTest extends TestCase
{
public function test(): void
{
$container = new Container();
self::assertFalse($container->has(MailerInterface::class));

$object = $this->getSomeService($container);
$mailer = $object->fakeMailer();
self::assertInstanceOf(FakeMailer::class, $mailer);
self::assertTrue($container->has(MailerInterface::class));
$mailer2 = $object->fakeMailer();
self::assertSame($mailer, $mailer2);
}

private function getSomeService(Container $container):object
{
return new class ($container) {
use InteractsWithMailer;

public function __construct(
private readonly Container $container
) {
}

public function getContainer(): Container
{
return $this->container;
}
};
}
}
50 changes: 50 additions & 0 deletions tests/src/Traits/InteractsWithQueueTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

declare(strict_types=1);

namespace Spiral\Testing\Tests\Traits;

use PHPUnit\Framework\TestCase;
use Spiral\Core\Container;
use Spiral\Queue\Config\QueueConfig;
use Spiral\Queue\QueueConnectionProviderInterface;
use Spiral\Testing\Queue\FakeQueueManager;
use Spiral\Testing\Traits\InteractsWithQueue;

/**
* @coversDefaultClass InteractsWithQueue
*/
final class InteractsWithQueueTest extends TestCase
{
public function test(): void
{
$container = new Container();
$manager = new FakeQueueManager($container, new QueueConfig());
$container->bind(FakeQueueManager::class, $manager);
self::assertFalse($container->has(QueueConnectionProviderInterface::class));

$object = $this->getSomeService($container);
$queue = $object->fakeQueue();
self::assertInstanceOf(FakeQueueManager::class, $queue);
self::assertTrue($container->has(QueueConnectionProviderInterface::class));
$queue2 = $object->fakeQueue();
self::assertSame($queue, $queue2);
}

private function getSomeService(Container $container):object
{
return new class ($container) {
use InteractsWithQueue;

public function __construct(
private readonly Container $container
) {
}

public function getContainer(): Container
{
return $this->container;
}
};
}
}

0 comments on commit 5255f54

Please sign in to comment.