Skip to content

Commit

Permalink
Merge pull request #297 from gacela-project/use-detailed-by-default-i…
Browse files Browse the repository at this point in the history
…nstead-of-simple

Use detailed by default instead of simple
  • Loading branch information
Chemaclass committed Jun 25, 2023
2 parents 416468d + d347845 commit 742e6c3
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 55 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

### Unreleased

- Added command `gacela list:modules [--detailed|-d]`
- Added command `gacela list:modules [--simple|-s]`
- Fixed Windows support

### 1.4.0
Expand Down
42 changes: 20 additions & 22 deletions src/Console/Infrastructure/Command/ListModulesCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ protected function configure(): void
$this->setName('list:modules')
->setDescription('Render all modules found')
->addArgument('filter', InputArgument::OPTIONAL, 'Any filter to simplify the output')
->addOption('detailed', 'd', InputOption::VALUE_NONE, 'Display a detailed information of each module');
->addOption('simple', 's', InputOption::VALUE_NONE, 'Display just the module names');
}

protected function execute(InputInterface $input, OutputInterface $output): int
{
$filter = (string)$input->getArgument('filter');

$listOfModules = $this->generateListOfModules(
(bool)$input->getOption('detailed'),
(bool)$input->getOption('simple'),
$this->getFacade()->findAllAppModules($filter),
);

Expand All @@ -45,56 +45,54 @@ protected function execute(InputInterface $input, OutputInterface $output): int
/**
* @param list<AppModule> $modules
*/
private function generateListOfModules(bool $isDetailed, array $modules): string
private function generateListOfModules(bool $isSimple, array $modules): string
{
if ($isDetailed) {
return $this->generateDetailedView($modules);
}

return $this->generateNonDetailedView($modules);
return ($isSimple)
? $this->generateSimpleView($modules)
: $this->generateDetailedView($modules);
}

/**
* @param list<AppModule> $modules
*/
private function generateDetailedView(array $modules): string
private function generateSimpleView(array $modules): string
{
$result = '';

foreach ($modules as $i => $module) {
$n = $i + 1;
$factory = $module->factoryClass() ?? 'None';
$config = $module->configClass() ?? 'None';
$dependencyProviderClass = $module->dependencyProviderClass() ?? 'None';

$result .= <<<TXT
============================
{$n}.- <fg=green>{$module->moduleName()}</>
----------------------------
<fg=cyan>Facade</>: {$module->facadeClass()}
<fg=cyan>Factory</>: {$factory}
<fg=cyan>Config</>: {$config}
<fg=cyan>DependencyProvider</>: {$dependencyProviderClass}
TXT;
}

return $result;
}

/**
* @param list<AppModule> $modules
*/
private function generateNonDetailedView(array $modules): string
private function generateDetailedView(array $modules): string
{
$result = '';

foreach ($modules as $i => $module) {
$n = $i + 1;
$factory = $module->factoryClass() ?? 'None';
$config = $module->configClass() ?? 'None';
$dependencyProviderClass = $module->dependencyProviderClass() ?? 'None';

$result .= <<<TXT
============================
{$n}.- <fg=green>{$module->moduleName()}</>
----------------------------
<fg=cyan>Facade</>: {$module->facadeClass()}
<fg=cyan>Factory</>: {$factory}
<fg=cyan>Config</>: {$config}
<fg=cyan>DependencyProvider</>: {$dependencyProviderClass}
TXT;
}

return $result;
}
}
49 changes: 17 additions & 32 deletions tests/Feature/Console/ListModules/ListModulesCommandTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,49 +4,41 @@

namespace GacelaTest\Feature\Console\ListModules;

use Gacela\Console\Infrastructure\ConsoleBootstrap;
use Gacela\Console\Infrastructure\Command\ListModulesCommand;
use Gacela\Framework\Bootstrap\GacelaConfig;
use Gacela\Framework\Gacela;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Console\Input\StringInput;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\Console\Tester\CommandTester;

final class ListModulesCommandTest extends TestCase
{
public function test_list_modules(): void
private CommandTester $command;

protected function setUp(): void
{
Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
$config->resetInMemoryCache();
});

$input = new StringInput('list:modules');
$output = new BufferedOutput();
$this->command = new CommandTester(new ListModulesCommand());
}

$bootstrap = new ConsoleBootstrap();
$bootstrap->setAutoExit(false);
$bootstrap->run($input, $output);
public function test_list_modules_simple(): void
{
$this->command->execute(['--simple' => null]);

$expected = <<<TXT
1.- TestModule3
2.- TestModule1
3.- TestModule2
TXT;
self::assertSame($expected, $output->fetch());
self::assertSame($expected, $this->command->getDisplay());
}

public function test_list_detailed_modules(): void
public function test_list_modules(): void
{
Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
$config->resetInMemoryCache();
});

$input = new StringInput('list:modules --detailed');
$output = new BufferedOutput();

$bootstrap = new ConsoleBootstrap();
$bootstrap->setAutoExit(false);
$bootstrap->run($input, $output);
$this->command->execute([]);

$expected = <<<TXT
============================
Expand All @@ -72,24 +64,17 @@ public function test_list_detailed_modules(): void
DependencyProvider: None
TXT;
self::assertSame($expected, $output->fetch());
self::assertSame($expected, $this->command->getDisplay());
}

/**
* @dataProvider commandInputProvider
*/
public function test_list_modules_with_filter(string $input): void
{
Gacela::bootstrap(__DIR__);

$input = new StringInput('list:modules ' . $input);
$output = new BufferedOutput();

$bootstrap = new ConsoleBootstrap();
$bootstrap->setAutoExit(false);
$bootstrap->run($input, $output);
$this->command->execute(['filter' => $input]);

$out = $output->fetch();
$out = $this->command->getDisplay();

self::assertStringContainsString('TestModule1', $out);
self::assertStringNotContainsString('TestModule2', $out);
Expand All @@ -101,6 +86,6 @@ public function test_list_modules_with_filter(string $input): void
public function commandInputProvider(): iterable
{
yield 'slashes' => ['ListModules/TestModule1'];
yield 'backward slashes' => ['ListModules\\\TestModule1'];
yield 'backward slashes' => ['ListModules\\TestModule1'];
}
}

0 comments on commit 742e6c3

Please sign in to comment.