Passed
Push — add-with-all-to-modules-list ( 82b81d...0edb38 )
by Chema
03:40
created

ListModulesCommandTest::test_list_modules_simple()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 12
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 15
rs 9.8666
1
<?php
2
3
declare(strict_types=1);
4
5
namespace GacelaTest\Feature\Console\ListModules;
6
7
use Gacela\Console\Infrastructure\Command\ListModulesCommand;
8
use Gacela\Console\Infrastructure\ConsoleBootstrap;
9
use Gacela\Framework\Bootstrap\GacelaConfig;
10
use Gacela\Framework\Gacela;
11
use PHPUnit\Framework\TestCase;
12
use Symfony\Component\Console\Input\StringInput;
13
use Symfony\Component\Console\Output\BufferedOutput;
14
use Symfony\Component\Console\Tester\CommandTester;
15
16
final class ListModulesCommandTest extends TestCase
17
{
18
    private CommandTester $command;
19
20
    protected function setUp(): void
21
    {
22
        Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
23
            $config->resetInMemoryCache();
24
        });
25
26
        $this->command = new CommandTester(new ListModulesCommand());
27
    }
28
29
    public function test_list_modules_simple(): void
30
    {
31
        $this->command->execute([]);
32
33
        $expected = <<<TXT
34
┌────────────────────────────────────────────────────────────┬────────┬─────────┬────────┬───────────────┐
35
│ Module namespace                                           │ Facade │ Factory │ Config │ Dep. Provider │
36
├────────────────────────────────────────────────────────────┼────────┼─────────┼────────┼───────────────┤
37
│ GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3 │ ✔️     │ ✔️      │ ✔️     │ ✖️            │
38
│ GacelaTest\Feature\Console\ListModules\TestModule1         │ ✔️     │ ✔️      │ ✖️     │ ✔️            │
39
│ GacelaTest\Feature\Console\ListModules\TestModule2         │ ✔️     │ ✖️      │ ✖️     │ ✖️            │
40
└────────────────────────────────────────────────────────────┴────────┴─────────┴────────┴───────────────┘
41
42
TXT;
43
        self::assertSame($expected, $this->command->getDisplay());
44
    }
45
46
    public function test_list_modules(): void
47
    {
48
        $this->command->execute(['--detailed' => null]);
49
50
        $expected = <<<TXT
51
============================
52
1.- TestModule3
53
----------------------------
54
Facade: GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3\TestModule3Facade
55
Factory: GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3\TestModule3Factory
56
Config: GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3\TestModule3Config
57
DependencyProvider: ✖️
58
============================
59
2.- TestModule1
60
----------------------------
61
Facade: GacelaTest\Feature\Console\ListModules\TestModule1\TestModule1Facade
62
Factory: GacelaTest\Feature\Console\ListModules\TestModule1\TestModule1Factory
63
Config: ✖️
64
DependencyProvider: GacelaTest\Feature\Console\ListModules\TestModule1\TestModule1DependencyProvider
65
============================
66
3.- TestModule2
67
----------------------------
68
Facade: GacelaTest\Feature\Console\ListModules\TestModule2\TestModule2Facade
69
Factory: ✖️
70
Config: ✖️
71
DependencyProvider: ✖️
72
73
TXT;
74
        self::assertSame($expected, $this->command->getDisplay());
75
    }
76
77
    /**
78
     * @dataProvider commandInputProvider
79
     */
80
    public function test_list_modules_with_filter(string $input): void
81
    {
82
        $this->command->execute(['filter' => $input]);
83
84
        $out = $this->command->getDisplay();
85
86
        self::assertStringContainsString('TestModule1', $out);
87
        self::assertStringNotContainsString('TestModule2', $out);
88
        self::assertStringNotContainsString('TestModule3', $out);
89
        self::assertStringNotContainsString('vendor', $out);
90
        self::assertStringNotContainsString('ToBeIgnored', $out);
91
    }
92
93
    public function test_list_modules_all(): void
94
    {
95
        Gacela::bootstrap(__DIR__);
96
97
        $input = new StringInput('list:modules --all');
98
        $output = new BufferedOutput();
99
100
        $bootstrap = new ConsoleBootstrap();
101
        $bootstrap->setAutoExit(false);
102
        $bootstrap->run($input, $output);
103
104
        $out = $output->fetch();
105
106
        self::assertMatchesRegularExpression('#.*ListModules\\\TestModule1#', $out);
107
        self::assertMatchesRegularExpression('#.*ListModules\\\TestModule2#', $out);
108
        self::assertMatchesRegularExpression('#.*ListModules\\\LevelUp\\\TestModule3#', $out);
109
        self::assertStringNotContainsString('vendor', $out);
110
        self::assertStringNotContainsString('ToBeIgnored', $out);
111
    }
112
113
    public function commandInputProvider(): iterable
114
    {
115
        yield 'slashes' => ['ListModules/TestModule1'];
116
        yield 'backward slashes' => ['ListModules\\TestModule1'];
117
    }
118
}
119