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

AssetOperationTest::testBuildFromArray()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 14
nc 1
nop 0
dl 0
loc 17
rs 9.7998
c 0
b 0
f 0
1
<?php
2
3
4
namespace TheCodingMachine\Discovery\Tests;
5
6
use PHPUnit\Framework\TestCase;
7
use InvalidArgumentException;
8
use TheCodingMachine\Discovery\Asset;
9
use TheCodingMachine\Discovery\AssetOperation;
10
use TheCodingMachine\Discovery\Utils\JsonException;
11
12
class AssetOperationTest extends TestCase
13
{
14
    public function testBuildFromString()
15
    {
16
        $assetOperation = AssetOperation::buildFromString('foo', 'bar/baz', 'vendor/bar/baz');
17
        $this->assertSame(AssetOperation::ADD, $assetOperation->getOperation());
18
        $this->assertSame('foo', $assetOperation->getAsset()->getValue());
19
        $this->assertEquals(0, $assetOperation->getAsset()->getPriority());
20
        $this->assertSame([], $assetOperation->getAsset()->getMetadata());
21
        $this->assertSame('bar/baz', $assetOperation->getAsset()->getPackage());
22
        $this->assertSame('vendor/bar/baz', $assetOperation->getAsset()->getPackageDir());
23
    }
24
25
    public function testBuildFromArray()
26
    {
27
        $assetOperation = AssetOperation::buildFromArray([
28
            'value' => 'foo',
29
            'priority' => 99,
30
            'metadata' => [
31
                'foo' => 'bar'
32
            ]
33
        ], 'bar/baz', 'vendor/bar/baz');
34
        $this->assertSame(AssetOperation::ADD, $assetOperation->getOperation());
35
        $this->assertSame('foo', $assetOperation->getAsset()->getValue());
36
        $this->assertEquals(99, $assetOperation->getAsset()->getPriority());
37
        $this->assertSame([
38
            'foo' => 'bar'
39
        ], $assetOperation->getAsset()->getMetadata());
40
        $this->assertSame('bar/baz', $assetOperation->getAsset()->getPackage());
41
        $this->assertSame('vendor/bar/baz', $assetOperation->getAsset()->getPackageDir());
42
    }
43
44
    public function testBuildFromArrayWithMissingValues()
45
    {
46
        $assetOperation = AssetOperation::buildFromArray([
47
            'value' => 'foo',
48
        ], 'bar/baz', 'vendor/bar/baz');
49
        $this->assertSame(AssetOperation::ADD, $assetOperation->getOperation());
50
        $this->assertSame('foo', $assetOperation->getAsset()->getValue());
51
        $this->assertSame(0.0, $assetOperation->getAsset()->getPriority());
52
        $this->assertSame([], $assetOperation->getAsset()->getMetadata());
53
    }
54
55
    public function testBuildFromArrayWithBadKey()
56
    {
57
        $this->expectException(JsonException::class);
58
        AssetOperation::buildFromArray([
59
            'badkey' => 'foo',
60
            'value' => 'foo'
61
        ], 'bar/baz', 'vendor/bar/baz');
62
    }
63
64
    public function testBuildFromArrayWithNoValue()
65
    {
66
        $this->expectException(JsonException::class);
67
        AssetOperation::buildFromArray([
68
        ], 'bar/baz', 'vendor/bar/baz');
69
    }
70
71
    public function testConstructorError()
72
    {
73
        $this->expectException(InvalidArgumentException::class);
74
        new AssetOperation('boom', new Asset("value", "package", "packagedir", 0, []));
75
    }
76
77
    public function testToSimpleArray()
78
    {
79
        $asset = new Asset('foo', 'package/a', 'vendor/package/a', 0.0, null);
80
        $assetOperation = new AssetOperation(AssetOperation::REMOVE, $asset);
81
82
        $this->assertSame([
83
            'value' => 'foo',
84
            'action' => 'remove'
85
        ], $assetOperation->toSimpleArray());
86
87
        $asset = new Asset('foo', 'package/a', 'vendor/package/a', 0.0, null);
88
        $assetOperation = new AssetOperation(AssetOperation::ADD, $asset);
89
90
        $this->assertSame('foo', $assetOperation->toSimpleArray());
91
    }
92
}
93