Skip to content

Commit 91f8a81

Browse files
authored
[Fix] assert ide is defined before resolving it (#319)
* Add test to reproduce issue 318 * Fix resolve config when ide is null or empty string
1 parent 6995b08 commit 91f8a81

File tree

2 files changed

+79
-4
lines changed

2 files changed

+79
-4
lines changed

src/Domain/Configuration.php

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ final class Configuration
8282
/**
8383
* Configuration constructor.
8484
*
85-
* @param array<string, string|array> $config
85+
* @param array<string, string|array|null> $config
8686
*/
8787
public function __construct(array $config)
8888
{
@@ -169,7 +169,7 @@ public function getFileLinkFormatter(): FileLinkFormatterContract
169169
}
170170

171171
/**
172-
* @param array<string, string|array> $config
172+
* @param array<string, string|array|null> $config
173173
*/
174174
private function resolveConfig(array $config): void
175175
{
@@ -198,8 +198,12 @@ private function resolveConfig(array $config): void
198198
$this->remove = $config['remove'];
199199
$this->config = $config['config'];
200200

201-
if (array_key_exists('ide', $config)) {
202-
$this->fileLinkFormatter = $this->resolveIde($config['ide']);
201+
if (
202+
array_key_exists('ide', $config)
203+
&& is_string($config['ide'])
204+
&& $config['ide'] !== ''
205+
) {
206+
$this->fileLinkFormatter = $this->resolveIde((string) $config['ide']);
203207
}
204208
}
205209

@@ -249,6 +253,7 @@ private function validateConfigInsights(): \Closure
249253
return true;
250254
};
251255
}
256+
252257
private function resolveIde(string $ide): FileLinkFormatterContract
253258
{
254259
$links = [

tests/Domain/ConfigurationTest.php

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tests\Domain;
6+
7+
use NunoMaduro\PhpInsights\Domain\Configuration;
8+
use NunoMaduro\PhpInsights\Domain\Exceptions\InvalidConfiguration;
9+
use NunoMaduro\PhpInsights\Domain\LinkFormatter\FileLinkFormatter;
10+
use NunoMaduro\PhpInsights\Domain\LinkFormatter\NullFileLinkFormatter;
11+
use PHPUnit\Framework\TestCase;
12+
13+
final class ConfigurationTest extends TestCase
14+
{
15+
public function testPassEmptyArrayReturnDefaultConfiguration(): void
16+
{
17+
$configuration = new Configuration([]);
18+
19+
self::assertEquals(getcwd(), $configuration->getDirectory());
20+
self::assertEquals('default', $configuration->getPreset());
21+
self::assertEquals([], $configuration->getAdd());
22+
self::assertEquals([], $configuration->getExcludes());
23+
self::assertEquals([], $configuration->getConfig());
24+
self::assertEquals([], $configuration->getRemoves());
25+
}
26+
27+
public function testWithNullIde(): void
28+
{
29+
$config = [
30+
'ide' => null,
31+
];
32+
33+
$configuration = new Configuration($config);
34+
35+
self::assertInstanceOf(NullFileLinkFormatter::class, $configuration->getFileLinkFormatter());
36+
}
37+
38+
public function testWithEmptyIde(): void
39+
{
40+
$config = [
41+
'ide' => '',
42+
];
43+
44+
$configuration = new Configuration($config);
45+
46+
self::assertInstanceOf(NullFileLinkFormatter::class, $configuration->getFileLinkFormatter());
47+
}
48+
49+
public function testWithSelectedIde(): void
50+
{
51+
$config = [
52+
'ide' => 'sublime',
53+
];
54+
55+
$configuration = new Configuration($config);
56+
self::assertInstanceOf(FileLinkFormatter::class, $configuration->getFileLinkFormatter());
57+
}
58+
59+
public function testWithUnknowIde(): void
60+
{
61+
self::expectException(InvalidConfiguration::class);
62+
self::expectExceptionMessage('Unknow IDE "notepad++"');
63+
64+
$config = [
65+
'ide' => 'notepad++',
66+
];
67+
68+
new Configuration($config);
69+
}
70+
}

0 commit comments

Comments
 (0)