Passed
Push — use-detailed-by-default-instea... ( f1cf43...d34784 )
by Chema
03:03
created

ListModulesCommandTest::setUp()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 7
rs 10
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\Framework\Bootstrap\GacelaConfig;
9
use Gacela\Framework\Gacela;
10
use PHPUnit\Framework\TestCase;
11
use Symfony\Component\Console\Tester\CommandTester;
12
13
final class ListModulesCommandTest extends TestCase
14
{
15
    private CommandTester $command;
16
17
    protected function setUp(): void
18
    {
19
        Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
20
            $config->resetInMemoryCache();
21
        });
22
23
        $this->command = new CommandTester(new ListModulesCommand());
24
    }
25
26
    public function test_list_modules_simple(): void
27
    {
28
        $this->command->execute(['--simple' => null]);
29
30
        $expected = <<<TXT
31
1.- TestModule3
32
2.- TestModule1
33
3.- TestModule2
34
35
TXT;
36
        self::assertSame($expected, $this->command->getDisplay());
37
    }
38
39
    public function test_list_modules(): void
40
    {
41
        $this->command->execute([]);
42
43
        $expected = <<<TXT
44
============================
45
1.- TestModule3
46
----------------------------
47
Facade: GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3\TestModule3Facade
48
Factory: GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3\TestModule3Factory
49
Config: GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3\TestModule3Config
50
DependencyProvider: None
51
============================
52
2.- TestModule1
53
----------------------------
54
Facade: GacelaTest\Feature\Console\ListModules\TestModule1\TestModule1Facade
55
Factory: GacelaTest\Feature\Console\ListModules\TestModule1\TestModule1Factory
56
Config: None
57
DependencyProvider: GacelaTest\Feature\Console\ListModules\TestModule1\TestModule1DependencyProvider
58
============================
59
3.- TestModule2
60
----------------------------
61
Facade: GacelaTest\Feature\Console\ListModules\TestModule2\TestModule2Facade
62
Factory: None
63
Config: None
64
DependencyProvider: None
65
66
TXT;
67
        self::assertSame($expected, $this->command->getDisplay());
68
    }
69
70
    /**
71
     * @dataProvider commandInputProvider
72
     */
73
    public function test_list_modules_with_filter(string $input): void
74
    {
75
        $this->command->execute(['filter' => $input]);
76
77
        $out = $this->command->getDisplay();
78
79
        self::assertStringContainsString('TestModule1', $out);
80
        self::assertStringNotContainsString('TestModule2', $out);
81
        self::assertStringNotContainsString('TestModule3', $out);
82
        self::assertStringNotContainsString('vendor', $out);
83
        self::assertStringNotContainsString('ToBeIgnored', $out);
84
    }
85
86
    public function commandInputProvider(): iterable
87
    {
88
        yield 'slashes' => ['ListModules/TestModule1'];
89
        yield 'backward slashes' => ['ListModules\\TestModule1'];
90
    }
91
}
92