-
Notifications
You must be signed in to change notification settings - Fork 10
/
UpdatePackageInfoTest.php
128 lines (105 loc) · 4.17 KB
/
UpdatePackageInfoTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
namespace BringYourOwnIdeas\Maintenance\Tests\Tasks;
use BringYourOwnIdeas\Maintenance\Util\ComposerLoader;
use BringYourOwnIdeas\Maintenance\Util\ModuleHealthLoader;
use BringYourOwnIdeas\Maintenance\Util\SupportedAddonsLoader;
use PHPUnit_Framework_TestCase;
use RuntimeException;
use BringYourOwnIdeas\Maintenance\Tasks\UpdatePackageInfoTask;
use BringYourOwnIdeas\Maintenance\Model\Package;
use SilverStripe\Dev\SapphireTest;
/**
* @mixin PHPUnit_Framework_TestCase
*/
class UpdatePackageInfoTest extends SapphireTest
{
protected $usesDatabase = true;
protected function mockSupportedAddonsLoader()
{
$supportedAddonsLoader = $this->getMockBuilder(SupportedAddonsLoader::class)
->setMethods(['getAddonNames'])
->getMock();
return $supportedAddonsLoader;
}
protected function mockModuleHealthLoader()
{
$moduleHealthLoader = $this->getMockBuilder(ModuleHealthLoader::class)
->setMethods(['getModuleHealthInfo'])
->getMock();
return $moduleHealthLoader;
}
public function testGetPackageInfo()
{
$lockOutput = [(object) [
"name" => "fake/package",
"description" => "A faux package from a mocked composer.lock for testing purposes",
"version" => "1.0.0",
]];
/** @var UpdatePackageInfoTask $processor */
$processor = UpdatePackageInfoTask::create();
$output = $processor->getPackageInfo($lockOutput);
$this->assertIsArray($output);
$this->assertCount(1, $output);
$this->assertContains([
"Name" => "fake/package",
"Description" => "A faux package from a mocked composer.lock for testing purposes",
"Version" => "1.0.0"
], $output);
}
public function testGetSupportedPackagesEchosErrors()
{
$supportedAddonsLoader = $this->mockSupportedAddonsLoader();
$moduleHealthLoader = $this->mockModuleHealthLoader();
$supportedAddonsLoader->expects($this->once())
->method('getAddonNames')
->will($this->throwException(new RuntimeException('A test message')));
/** @var UpdatePackageInfoTask $task */
$task = UpdatePackageInfoTask::create();
$task->setSupportedAddonsLoader($supportedAddonsLoader);
$task->setModuleHealthLoader($moduleHealthLoader);
ob_start();
$task->getSupportedPackages();
$output = ob_get_clean();
$this->assertStringContainsString('A test message', $output);
}
public function testPackagesAreAddedCorrectly()
{
$task = UpdatePackageInfoTask::create();
$composerLoader = $this->getMockBuilder(ComposerLoader::class)
->setMethods(['getLock'])->getMock();
$composerLoader->expects($this->any())->method('getLock')->will($this->returnValue(json_decode(<<<LOCK
{
"packages": [
{
"name": "fake/supported-package",
"description": "A faux package from a mocked composer.lock for testing purposes",
"version": "1.0.0"
},
{
"name": "fake/unsupported-package",
"description": "A faux package from a mocked composer.lock for testing purposes",
"version": "1.0.0"
}
],
"packages-dev": null
}
LOCK
)));
$task->setComposerLoader($composerLoader);
$supportedAddonsLoader = $this->mockSupportedAddonsLoader();
$moduleHealthLoader = $this->mockModuleHealthLoader();
$supportedAddonsLoader->expects($this->once())
->method('getAddonNames')
->will($this->returnValue(['fake/supported-package']));
$task->setSupportedAddonsLoader($supportedAddonsLoader);
$task->run(null);
$packages = Package::get();
$this->assertCount(2, $packages);
$package = $packages->find('Name', 'fake/supported-package');
$this->assertInstanceOf(Package::class, $package);
$this->assertEquals(1, $package->Supported);
$package = $packages->find('Name', 'fake/unsupported-package');
$this->assertInstanceOf(Package::class, $package);
$this->assertEquals(0, $package->Supported);
}
}