Passed
Push — master ( 8bad73...c5d158 )
by David
57s queued 11s
created

PackagesOrdererTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 21
dl 0
loc 53
rs 10
c 0
b 0
f 0
wmc 5

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testOrderer() 0 17 1
A getVersionParser() 0 7 2
A testOrdererOnUnrelatedPackages() 0 11 1
A getPackage() 0 5 1
1
<?php
2
3
4
namespace TheCodingMachine\Discovery\Tests;
5
6
use Composer\Semver\Constraint\Constraint;
7
use Composer\Semver\VersionParser;
8
use Composer\Package\Link;
9
use PHPUnit\Framework\TestCase;
10
use TheCodingMachine\Discovery\PackagesOrderer;
11
12
class PackagesOrdererTest extends TestCase
13
{
14
    private static $parser;
15
16
    protected static function getVersionParser()
17
    {
18
        if (!self::$parser) {
19
            self::$parser = new VersionParser();
20
        }
21
22
        return self::$parser;
23
    }
24
25
    protected function getPackage($name, $version, $class = 'Composer\Package\Package')
26
    {
27
        $normVersion = self::getVersionParser()->normalize($version);
28
29
        return new $class($name, $normVersion, $version);
30
    }
31
32
    public function testOrderer()
33
    {
34
        $packageA = $this->getPackage('package/za', '1.0');
35
        $packageB = $this->getPackage('package/b', '1.0');
36
        $packageC = $this->getPackage('package/c', '1.0');
37
        /* @var $packageA \Composer\Package\Package */
38
        /* @var $packageB \Composer\Package\Package */
39
        /* @var $packageC \Composer\Package\Package */
40
        $packageB->setRequires([
41
            new Link('package/b', 'package/za', new Constraint('=', '*'))
42
        ]);
43
        $packageC->setRequires([
44
            new Link('package/c', 'package/b', new Constraint('=', '*'))
45
        ]);
46
47
        $result = PackagesOrderer::reorderPackages([$packageC, $packageB, $packageA]);
48
        $this->assertSame([$packageA, $packageB, $packageC], $result);
49
    }
50
51
    /**
52
     * Tests that unrelated packages are ordered alphabetically
53
     */
54
    public function testOrdererOnUnrelatedPackages()
55
    {
56
        $packageA = $this->getPackage('package/a', '1.0');
57
        $packageB = $this->getPackage('package/b', '1.0');
58
        $packageC = $this->getPackage('package/c', '1.0');
59
        /* @var $packageA \Composer\Package\Package */
60
        /* @var $packageB \Composer\Package\Package */
61
        /* @var $packageC \Composer\Package\Package */
62
63
        $result = PackagesOrderer::reorderPackages([$packageC, $packageB, $packageA]);
64
        $this->assertSame([$packageA, $packageB, $packageC], $result);
65
    }
66
}
67