mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-02 22:28:37 +02:00
Separate composer.lock load method and add test mocking it
This commit is contained in:
parent
ee4d8b4d4e
commit
48d9088ab4
@ -57,28 +57,47 @@ class SilverStripeVersionProvider
|
|||||||
public function getModuleVersionFromComposer($modules = array())
|
public function getModuleVersionFromComposer($modules = array())
|
||||||
{
|
{
|
||||||
$versions = array();
|
$versions = array();
|
||||||
$composerLockPath = BASE_PATH . '/composer.lock';
|
$lockData = $this->getComposerLock();
|
||||||
if (file_exists($composerLockPath)) {
|
if ($lockData && !empty($lockData['packages'])) {
|
||||||
$cache = SS_Cache::factory('SilverStripeVersionProvider_composerlock');
|
foreach ($lockData['packages'] as $package) {
|
||||||
$cacheKey = filemtime($composerLockPath);
|
if (in_array($package['name'], $modules) && isset($package['version'])) {
|
||||||
$versions = $cache->load($cacheKey);
|
$versions[$package['name']] = $package['version'];
|
||||||
if ($versions) {
|
|
||||||
$versions = json_decode($versions, true);
|
|
||||||
} else {
|
|
||||||
$versions = array();
|
|
||||||
}
|
|
||||||
if (!$versions && $jsonData = file_get_contents($composerLockPath)) {
|
|
||||||
$lockData = json_decode($jsonData);
|
|
||||||
if ($lockData && isset($lockData->packages)) {
|
|
||||||
foreach ($lockData->packages as $package) {
|
|
||||||
if (in_array($package->name, $modules) && isset($package->version)) {
|
|
||||||
$versions[$package->name] = $package->version;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$cache->save(json_encode($versions), $cacheKey);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $versions;
|
return $versions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load composer.lock's contents and return it
|
||||||
|
*
|
||||||
|
* @param bool $cache
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function getComposerLock($cache = true)
|
||||||
|
{
|
||||||
|
$composerLockPath = BASE_PATH . '/composer.lock';
|
||||||
|
if (!file_exists($composerLockPath)) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
$lockData = array();
|
||||||
|
if ($cache) {
|
||||||
|
$cache = SS_Cache::factory('SilverStripeVersionProvider_composerlock');
|
||||||
|
$cacheKey = filemtime($composerLockPath);
|
||||||
|
if ($versions = $cache->load($cacheKey)) {
|
||||||
|
$lockData = json_decode($versions, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($lockData) && $jsonData = file_get_contents($composerLockPath)) {
|
||||||
|
$lockData = json_decode($jsonData, true);
|
||||||
|
|
||||||
|
if ($cache) {
|
||||||
|
$cache->save(json_encode($lockData), $cacheKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $lockData;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,4 +52,33 @@ class SilverStripeVersionProviderTest extends SapphireTest
|
|||||||
$this->assertContains('Framework: ', $result);
|
$this->assertContains('Framework: ', $result);
|
||||||
$this->assertContains(', ', $result);
|
$this->assertContains(', ', $result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testGetModulesFromComposerLock()
|
||||||
|
{
|
||||||
|
$mock = $this->getMockBuilder('SilverStripeVersionProvider')
|
||||||
|
->setMethods(array('getComposerLock'))
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$mock->expects($this->once())
|
||||||
|
->method('getComposerLock')
|
||||||
|
->will($this->returnValue(array(
|
||||||
|
'packages' => array(
|
||||||
|
array(
|
||||||
|
'name' => 'silverstripe/somepackage',
|
||||||
|
'version' => '1.2.3'
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'name' => 'silverstripe/another',
|
||||||
|
'version' => '2.3.4'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)));
|
||||||
|
|
||||||
|
Config::inst()->update('SilverStripeVersionProvider', 'modules', array(
|
||||||
|
'silverstripe/somepackage' => 'Some Package'
|
||||||
|
));
|
||||||
|
|
||||||
|
$result = $mock->getVersion();
|
||||||
|
$this->assertContains('Some Package: 1.2.3', $result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user