ListModulesCommandTest   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Importance

Changes 7
Bugs 0 Features 0
Metric Value
eloc 53
dl 0
loc 79
rs 10
c 7
b 0
f 0
wmc 5

5 Methods

Rating   Name   Duplication   Size   Complexity  
A test_list_modules_simple() 0 15 1
A test_list_modules_with_filter() 0 12 1
A commandInputProvider() 0 4 1
A test_list_modules() 0 29 1
A setUp() 0 7 1
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\Attributes\DataProvider;
11
use PHPUnit\Framework\TestCase;
12
use Symfony\Component\Console\Tester\CommandTester;
13
14
final class ListModulesCommandTest extends TestCase
15
{
16
    private CommandTester $command;
17
18
    protected function setUp(): void
19
    {
20
        Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
21
            $config->resetInMemoryCache();
22
        });
23
24
        $this->command = new CommandTester(new ListModulesCommand());
25
    }
26
27
    public function test_list_modules_simple(): void
28
    {
29
        $this->command->execute([]);
30
31
        $expected = <<<TXT
32
┌────────────────────────────────────────────────────────────┬────────┬─────────┬────────┬───────────────┐
33
│ Module namespace                                           │ Facade │ Factory │ Config │ Dep. Provider │
34
├────────────────────────────────────────────────────────────┼────────┼─────────┼────────┼───────────────┤
35
│ GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3 │ ✔️     │ ✔️      │ ✔️     │ ✖️            │
36
│ GacelaTest\Feature\Console\ListModules\TestModule1         │ ✔️     │ ✔️      │ ✖️     │ ✔️            │
37
│ GacelaTest\Feature\Console\ListModules\TestModule2         │ ✔️     │ ✖️      │ ✖️     │ ✖️            │
38
└────────────────────────────────────────────────────────────┴────────┴─────────┴────────┴───────────────┘
39
40
TXT;
41
        self::assertSame($expected, $this->command->getDisplay());
42
    }
43
44
    public function test_list_modules(): void
45
    {
46
        $this->command->execute(['--detailed' => null]);
47
48
        $expected = <<<TXT
49
============================
50
1.- TestModule3
51
----------------------------
52
Facade: GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3\TestModule3Facade
53
Factory: GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3\TestModule3Factory
54
Config: GacelaTest\Feature\Console\ListModules\LevelUp\TestModule3\TestModule3Config
55
Provider: ✖️
56
============================
57
2.- TestModule1
58
----------------------------
59
Facade: GacelaTest\Feature\Console\ListModules\TestModule1\TestModule1Facade
60
Factory: GacelaTest\Feature\Console\ListModules\TestModule1\TestModule1Factory
61
Config: ✖️
62
Provider: GacelaTest\Feature\Console\ListModules\TestModule1\TestModule1Provider
63
============================
64
3.- TestModule2
65
----------------------------
66
Facade: GacelaTest\Feature\Console\ListModules\TestModule2\TestModule2Facade
67
Factory: ✖️
68
Config: ✖️
69
Provider: ✖️
70
71
TXT;
72
        self::assertSame($expected, $this->command->getDisplay());
73
    }
74
75
    #[DataProvider('commandInputProvider')]
76
    public function test_list_modules_with_filter(string $input): void
77
    {
78
        $this->command->execute(['filter' => $input]);
79
80
        $out = $this->command->getDisplay();
81
82
        self::assertStringContainsString('TestModule1', $out);
83
        self::assertStringNotContainsString('TestModule2', $out);
84
        self::assertStringNotContainsString('TestModule3', $out);
85
        self::assertStringNotContainsString('vendor', $out);
86
        self::assertStringNotContainsString('ToBeIgnored', $out);
87
    }
88
89
    public static function commandInputProvider(): iterable
90
    {
91
        yield 'slashes' => ['ListModules/TestModule1'];
92
        yield 'backward slashes' => ['ListModules\\TestModule1'];
93
    }
94
}
95