Completed
Branch feature/add-scrutinizer (27b569)
by Matthias
02:05
created

LocateComposerPackageDirectDependenciesSourceFilesTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 77
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 3
dl 0
loc 77
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 7 1
A testNoDependencies() 0 8 1
B testSingleDependency() 0 24 1
A testVendorDirsWithoutComposerFilesAreIgnored() 0 19 1
A locate() 0 4 1
1
<?php
2
3
namespace ComposerRequireCheckerTest\FileLocator;
4
5
use ComposerRequireChecker\FileLocator\LocateComposerPackageDirectDependenciesSourceFiles;
6
use org\bovigo\vfs\vfsStream;
7
use org\bovigo\vfs\vfsStreamDirectory;
8
use PHPUnit\Framework\TestCase;
9
10
/**
11
 * @covers \ComposerRequireChecker\FileLocator\LocateComposerPackageDirectDependenciesSourceFiles
12
 */
13
class LocateComposerPackageDirectDependenciesSourceFilesTest extends TestCase
14
{
15
    /** @var LocateComposerPackageDirectDependenciesSourceFiles */
16
    private $locator;
17
    /** @var vfsStreamDirectory */
18
    private $root;
19
20
    protected function setUp()
21
    {
22
        parent::setUp();
23
24
        $this->locator = new LocateComposerPackageDirectDependenciesSourceFiles();
25
        $this->root = vfsStream::setup();
26
    }
27
28
    public function testNoDependencies()
29
    {
30
        $composerJson = vfsStream::newFile('composer.json')->at($this->root)->withContent('{}')->url();
31
32
        $files = $this->locate($composerJson);
33
34
        $this->assertCount(0, $files);
35
    }
36
37
    public function testSingleDependency()
38
    {
39
        vfsStream::create([
40
            'composer.json' => '{"require":{"foo/bar": "^1.0"}}',
41
            'vendor' => [
42
                'foo' => [
43
                    'bar' => [
44
                        'composer.json' => '{"autoload":{"psr-4":{"":"src"}}}',
45
                        'src' => [
46
                            'MyClass.php' => '',
47
                        ],
48
                    ],
49
                ],
50
            ],
51
        ]);
52
53
        $files = $this->locate($this->root->getChild('composer.json')->url());
54
55
        $this->assertCount(1, $files);
56
57
        $expectedFile = $this->root->getChild('vendor/foo/bar/src/MyClass.php')->url();
58
        $actualFile = str_replace('\\', '/', reset($files));
59
        $this->assertSame($expectedFile, $actualFile);
60
    }
61
62
    public function testVendorDirsWithoutComposerFilesAreIgnored()
63
    {
64
        vfsStream::create([
65
            'composer.json' => '{"require": {"foo/bar": "^1.0"}}',
66
            'vendor' => [
67
                'foo' => [
68
                    'bar' => [
69
                        'src' => [
70
                            'MyClass.php' => '',
71
                        ],
72
                    ],
73
                ],
74
            ],
75
        ]);
76
77
        $files = $this->locate($this->root->getChild('composer.json')->url());
78
79
        $this->assertCount(0, $files);
80
    }
81
82
    /**
83
     * @return string[]
84
     */
85
    private function locate(string $composerJson): array
86
    {
87
        return iterator_to_array(($this->locator)($composerJson));
88
    }
89
}
90