Skip to content

Commit

Permalink
Add cli command for listing prototype dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
msmakouz committed Oct 17, 2023
1 parent bd02f0a commit e7dbfa5
Show file tree
Hide file tree
Showing 5 changed files with 142 additions and 4 deletions.
1 change: 1 addition & 0 deletions src/Prototype/src/Bootloader/PrototypeBootloader.php
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ public function __construct(
public function init(ConsoleBootloader $console): void
{
$console->addCommand(Command\DumpCommand::class);
$console->addCommand(Command\ListCommand::class);
$console->addCommand(Command\UsageCommand::class);
$console->addCommand(Command\InjectCommand::class);

Expand Down
31 changes: 31 additions & 0 deletions src/Prototype/src/Command/ListCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

declare(strict_types=1);

namespace Spiral\Prototype\Command;

final class ListCommand extends AbstractCommand
{
public const NAME = 'prototype:list';
public const DESCRIPTION = 'List all declared prototype dependencies';

public function perform(): int
{
$bindings = $this->registry->getPropertyBindings();
if ($bindings === []) {
$this->comment('No prototype dependencies found.');

Check warning on line 16 in src/Prototype/src/Command/ListCommand.php

View check run for this annotation

Codecov / codecov/patch

src/Prototype/src/Command/ListCommand.php#L16

Added line #L16 was not covered by tests

return self::SUCCESS;
}

$grid = $this->table(['Name:', 'Target:']);

foreach ($bindings as $binding) {
$grid->addRow([$binding->property, $binding->type->name()]);
}

$grid->render();

return self::SUCCESS;
}
}
10 changes: 10 additions & 0 deletions src/Prototype/tests/Commands/InjectCommandTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,16 @@

class InjectCommandTest extends AbstractCommandsTestCase
{
public function testCommandRegistered(): void
{
$out = new BufferedOutput();
$this->app->get(Console::class)->run('list', new ArrayInput([]), $out);

$result = $out->fetch();

$this->assertStringContainsString('prototype:inject', $result);
}

public function testEmptyInjection(): void
{
$target = EmptyInjectionClass::class;
Expand Down
98 changes: 98 additions & 0 deletions src/Prototype/tests/Commands/ListCommandTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
<?php

declare(strict_types=1);

namespace Spiral\Tests\Prototype\Commands;

use Spiral\Console\Console;
use Spiral\Tests\Prototype\Fixtures\TestApp;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;

final class ListCommandTest extends AbstractCommandsTestCase
{
public function testCommandRegistered(): void
{
$out = new BufferedOutput();
$this->app->get(Console::class)->run('list', new ArrayInput([]), $out);

$result = $out->fetch();

$this->assertStringContainsString('prototype:list', $result);
}

public function testList(): void
{
$out = new BufferedOutput();
$this->app->get(Console::class)->run('prototype:list', new ArrayInput([]), $out);

$result = $out->fetch();

$this->assertStringContainsString('app', $result);
$this->assertStringContainsString(TestApp::class, $result);
$this->assertStringContainsString('classLocator', $result);
$this->assertStringContainsString(\Spiral\Tokenizer\ClassesInterface::class, $result);
$this->assertStringContainsString('console', $result);
$this->assertStringContainsString(\Spiral\Console\Console::class, $result);
$this->assertStringContainsString('broadcast', $result);
$this->assertStringContainsString(\Spiral\Broadcasting\BroadcastInterface::class, $result);
$this->assertStringContainsString('container', $result);
$this->assertStringContainsString(\Psr\Container\ContainerInterface::class, $result);
$this->assertStringContainsString('encrypter', $result);
$this->assertStringContainsString(\Spiral\Encrypter\EncrypterInterface::class, $result);
$this->assertStringContainsString('env', $result);
$this->assertStringContainsString(\Spiral\Boot\EnvironmentInterface::class, $result);
$this->assertStringContainsString('files', $result);
$this->assertStringContainsString(\Spiral\Files\FilesInterface::class, $result);
$this->assertStringContainsString('guard', $result);
$this->assertStringContainsString(\Spiral\Security\GuardInterface::class, $result);
$this->assertStringContainsString('http', $result);
$this->assertStringContainsString(\Spiral\Http\Http::class, $result);
$this->assertStringContainsString('i18n', $result);
$this->assertStringContainsString(\Spiral\Translator\TranslatorInterface::class, $result);
$this->assertStringContainsString('input', $result);
$this->assertStringContainsString(\Spiral\Http\Request\InputManager::class, $result);
$this->assertStringContainsString('session', $result);
$this->assertStringContainsString(\Spiral\Session\SessionScope::class, $result);
$this->assertStringContainsString('cookies', $result);
$this->assertStringContainsString(\Spiral\Cookies\CookieManager::class, $result);
$this->assertStringContainsString('logger', $result);
$this->assertStringContainsString(\Psr\Log\LoggerInterface::class, $result);
$this->assertStringContainsString('logs', $result);
$this->assertStringContainsString(\Spiral\Logger\LogsInterface::class, $result);
$this->assertStringContainsString('memory', $result);
$this->assertStringContainsString(\Spiral\Boot\MemoryInterface::class, $result);
$this->assertStringContainsString('paginators', $result);
$this->assertStringContainsString(\Spiral\Pagination\PaginationProviderInterface::class, $result);
$this->assertStringContainsString('queue', $result);
$this->assertStringContainsString(\Spiral\Queue\QueueInterface::class, $result);
$this->assertStringContainsString('queueManager', $result);
$this->assertStringContainsString(\Spiral\Queue\QueueConnectionProviderInterface::class, $result);
$this->assertStringContainsString('request', $result);
$this->assertStringContainsString(\Spiral\Http\Request\InputManager::class, $result);
$this->assertStringContainsString('response', $result);
$this->assertStringContainsString(\Spiral\Http\ResponseWrapper::class, $result);
$this->assertStringContainsString('router', $result);
$this->assertStringContainsString(\Spiral\Router\RouterInterface::class, $result);
$this->assertStringContainsString('snapshots', $result);
$this->assertStringContainsString(\Spiral\Snapshots\SnapshotterInterface::class, $result);
$this->assertStringContainsString('storage', $result);
$this->assertStringContainsString(\Spiral\Storage\BucketInterface::class, $result);
$this->assertStringContainsString('serializer', $result);
$this->assertStringContainsString(\Spiral\Serializer\SerializerManager::class, $result);
$this->assertStringContainsString('validator', $result);
$this->assertStringContainsString(\Spiral\Validation\ValidationInterface::class, $result);
$this->assertStringContainsString('views', $result);
$this->assertStringContainsString(\Spiral\Views\ViewsInterface::class, $result);
$this->assertStringContainsString('auth', $result);
$this->assertStringContainsString(\Spiral\Auth\AuthScope::class, $result);
$this->assertStringContainsString('authTokens', $result);
$this->assertStringContainsString(\Spiral\Auth\TokenStorageInterface::class, $result);
$this->assertStringContainsString('cache', $result);
$this->assertStringContainsString(\Psr\SimpleCache\CacheInterface::class, $result);
$this->assertStringContainsString('cacheManager', $result);
$this->assertStringContainsString(\Spiral\Cache\CacheStorageProviderInterface::class, $result);
$this->assertStringContainsString('exceptionHandler', $result);
$this->assertStringContainsString(\Spiral\Exceptions\ExceptionHandlerInterface::class, $result);
}
}
6 changes: 2 additions & 4 deletions src/Prototype/tests/Commands/UsageCommandTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,14 @@

class UsageCommandTest extends AbstractCommandsTestCase
{
public function testList(): void
public function testCommandRegistered(): void
{
$inp = new ArrayInput([]);
$out = new BufferedOutput();
$this->app->get(Console::class)->run('list', $inp, $out);
$this->app->get(Console::class)->run('list', new ArrayInput([]), $out);

$result = $out->fetch();

$this->assertStringContainsString('prototype:usage', $result);
$this->assertStringContainsString('prototype:inject', $result);
}

public function testPrototypes(): void
Expand Down

0 comments on commit e7dbfa5

Please sign in to comment.