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

testSaveDiscoveryFileWithTwoAsset()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 13
nc 1
nop 0
dl 0
loc 23
rs 9.8333
c 0
b 0
f 0
1
<?php
2
3
4
namespace TheCodingMachine\Discovery;
5
6
use PHPUnit\Framework\TestCase;
7
use TheCodingMachine\Discovery\Utils\IOException;
8
use TheCodingMachine\Discovery\Utils\JsonException;
9
10
class DiscoveryFileLoaderTest extends TestCase
11
{
12
    public function testLoad()
13
    {
14
        $loader = new DiscoveryFileLoader();
15
16
        $assetTypes = $loader->loadDiscoveryFile(new \SplFileInfo(__DIR__.'/../fixtures/package_a/discovery.json'), 'fixture/package_a', 'vendor/fixture/package_a');
17
18
        $this->assertCount(1, $assetTypes);
19
        $assets = $assetTypes['test-asset'];
20
21
        $this->assertCount(2, $assets);
22
        $this->assertInstanceOf(AssetOperation::class, $assets[0]);
23
        $this->assertSame('a1', $assets[0]->getAsset()->getValue());
24
        $this->assertSame('a2', $assets[1]->getAsset()->getValue());
25
    }
26
27
    public function testLoadString()
28
    {
29
        $loader = new DiscoveryFileLoader();
30
31
        $assetTypes = $loader->loadDiscoveryFile(new \SplFileInfo(__DIR__.'/../fixtures/package_b/discovery.json'), 'fixture/package_a', 'vendor/fixture/package_a');
32
33
        $this->assertCount(1, $assetTypes);
34
        $assets = $assetTypes['test-asset'];
35
36
        $this->assertCount(1, $assets);
37
        $this->assertInstanceOf(AssetOperation::class, $assets[0]);
38
        $this->assertSame('b', $assets[0]->getAsset()->getValue());
39
    }
40
41
    public function testBadJson()
42
    {
43
        $loader = new DiscoveryFileLoader();
44
45
        $this->expectException(JsonException::class);
46
        $this->expectExceptionCode(0);
47
        $loader->loadDiscoveryFile(new \SplFileInfo(__DIR__.'/../fixtures/error_cases/bad.json'), 'fixture/package_a', 'vendor/fixture/package_a');
48
    }
49
50
    public function testBadJson2()
51
    {
52
        $loader = new DiscoveryFileLoader();
53
54
        $this->expectException(JsonException::class);
55
        $this->expectExceptionCode(0);
56
        $loader->loadDiscoveryFile(new \SplFileInfo(__DIR__.'/../fixtures/error_cases/bad2.json'), 'fixture/package_a', 'vendor/fixture/package_a');
57
    }
58
59
    public function testEmptyJson()
60
    {
61
        $loader = new DiscoveryFileLoader();
62
63
        $assetTypes = $loader->loadDiscoveryFile(new \SplFileInfo(__DIR__.'/../fixtures/error_cases/empty.json'), 'fixture/package_a', 'vendor/fixture/package_a');
64
65
        $this->assertCount(0, $assetTypes);
66
    }
67
68
    public function testLoadNotExist()
69
    {
70
        $loader = new DiscoveryFileLoader();
71
72
        $this->expectException(IOException::class);
73
        $loader->loadDiscoveryFile(new \SplFileInfo(__DIR__.'/../fixtures/notexist.json'), 'fixture/package_a', 'vendor/fixture/package_a');
74
    }
75
76
    public function testSaveDiscoveryFileWithOneAsset()
77
    {
78
        $loader = new DiscoveryFileLoader();
79
80
        $asset = new Asset('foo', 'package/a', 'vendor/package/a', 0.0, null);
81
        $assetOperation = new AssetOperation(AssetOperation::ADD, $asset);
82
83
        $assetOperationTypes = [
84
            'bar' => [
85
                $assetOperation
86
            ]
87
        ];
88
89
        $file = new \SplFileObject('php://temp', 'w+');
90
91
        $loader->saveDiscoveryFile($assetOperationTypes, $file);
92
        $file->rewind();
93
        $json = $file->fread(4096);
94
95
        $data = json_decode($json, true);
96
97
        $this->assertSame(['bar'=>'foo'], $data);
98
    }
99
100
    public function testSaveDiscoveryFileWithTwoAsset()
101
    {
102
        $loader = new DiscoveryFileLoader();
103
104
        $asset = new Asset('foo', 'package/a', 'vendor/package/a', 0.0, null);
105
        $assetOperation = new AssetOperation(AssetOperation::ADD, $asset);
106
107
        $assetOperationTypes = [
108
            'bar' => [
109
                $assetOperation,
110
                $assetOperation
111
            ]
112
        ];
113
114
        $file = new \SplFileObject('php://temp', 'w+');
115
116
        $loader->saveDiscoveryFile($assetOperationTypes, $file);
117
        $file->rewind();
118
        $json = $file->fread(4096);
119
120
        $data = json_decode($json, true);
121
122
        $this->assertSame(['bar'=>['foo', 'foo']], $data);
123
    }
124
}
125