Passed
Push — fix/solve-windows-ci ( 003700...709697 )
by Chema
07:40 queued 03:14
created

ListModulesCommandTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 81
Duplicated Lines 0 %

Importance

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

5 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 7 1
A test_list_modules_simple() 0 15 1
A test_list_modules_with_filter() 0 11 1
A commandInputProvider() 0 4 1
A test_list_modules() 0 29 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\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