Passed
Push — fix/solve-windows-ci ( 003700...709697 )
by Chema
07:40 queued 03:14
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\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([]);
29
30
        $expected = <<<TXT
31
┌────────────────────────────────────────────────────────────┬────────┬─────────┬────────┬───────────────┐
32
│ Module namespace                                           │ Facade │ Factory │ Config │ Dep. Provider │
33
├────────────────────────────────────────────────────────────┼────────┼─────────┼────────┼───────────────┤
34
│ GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3 │ ✔️     │ ✔️      │ ✔️     │ ✖️            │
35
│ GacelaTest\Feature\Console\ListModules\TestModule1         │ ✔️     │ ✔️      │ ✖️     │ ✔️            │
36
│ GacelaTest\Feature\Console\ListModules\TestModule2         │ ✔️     │ ✖️      │ ✖️     │ ✖️            │
37
└────────────────────────────────────────────────────────────┴────────┴─────────┴────────┴───────────────┘
38
39
TXT;
40
        self::assertSame($expected, $this->command->getDisplay());
41
    }
42
43
    public function test_list_modules(): void
44
    {
45
        $this->command->execute(['--detailed' => null]);
46
47
        $expected = <<<TXT
48
============================
49
1.- TestModule3
50
----------------------------
51
Facade: GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3\TestModule3Facade
52
Factory: GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3\TestModule3Factory
53
Config: GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3\TestModule3Config
54
DependencyProvider: ✖️
55
============================
56
2.- TestModule1
57
----------------------------
58
Facade: GacelaTest\Feature\Console\ListModules\TestModule1\TestModule1Facade
59
Factory: GacelaTest\Feature\Console\ListModules\TestModule1\TestModule1Factory
60
Config: ✖️
61
DependencyProvider: GacelaTest\Feature\Console\ListModules\TestModule1\TestModule1DependencyProvider
62
============================
63
3.- TestModule2
64
----------------------------
65
Facade: GacelaTest\Feature\Console\ListModules\TestModule2\TestModule2Facade
66
Factory: ✖️
67
Config: ✖️
68
DependencyProvider: ✖️
69
70
TXT;
71
        self::assertSame($expected, $this->command->getDisplay());
72
    }
73
74
    /**
75
     * @dataProvider commandInputProvider
76
     */
77
    public function test_list_modules_with_filter(string $input): void
78
    {
79
        $this->command->execute(['filter' => $input]);
80
81
        $out = $this->command->getDisplay();
82
83
        self::assertStringContainsString('TestModule1', $out);
84
        self::assertStringNotContainsString('TestModule2', $out);
85
        self::assertStringNotContainsString('TestModule3', $out);
86
        self::assertStringNotContainsString('vendor', $out);
87
        self::assertStringNotContainsString('ToBeIgnored', $out);
88
    }
89
90
    public function commandInputProvider(): iterable
91
    {
92
        yield 'slashes' => ['ListModules/TestModule1'];
93
        yield 'backward slashes' => ['ListModules\\TestModule1'];
94
    }
95
}
96