diff --git a/setup/modulediscovery.class.inc.php b/setup/modulediscovery.class.inc.php index 81482c678..d50758d40 100644 --- a/setup/modulediscovery.class.inc.php +++ b/setup/modulediscovery.class.inc.php @@ -120,10 +120,6 @@ class ModuleDiscovery $aArgs['module_file'] = $sFilePath; list($sModuleName, $sModuleVersion) = static::GetModuleName($sId); - if ($sModuleVersion == '') - { - $sModuleVersion = '1.0.0'; - } if (array_key_exists($sModuleName, self::$m_aModuleVersionByName)) { @@ -233,7 +229,7 @@ class ModuleDiscovery } ksort($aDependencies); $aOrderedModules = []; - $iLoopCount = 1; + $iLoopCount = 0; while(($iLoopCount < count($aModules)) && (count($aDependencies) > 0) ) { foreach($aDependencies as $sId => $aRemainingDeps) @@ -308,16 +304,8 @@ class ModuleDiscovery // Separate the module names from their version for an easier comparison later foreach($aOrderedModules as $sModuleId) { - $aMatches = array(); - if (preg_match('|^([^/]+)/(.*)$|', $sModuleId, $aMatches)) - { - $aModuleVersions[$aMatches[1]] = $aMatches[2]; - } - else - { - // No version number found, assume 1.0.0 - $aModuleVersions[$sModuleId] = '1.0.0'; - } + list($sModuleName, $sVersion) = self::GetModuleName($sModuleId); + $aModuleVersions[$sModuleName] = $sVersion; } if (preg_match_all('/([^\(\)&| ]+)/', $sDepString, $aMatches)) { @@ -456,13 +444,17 @@ class ModuleDiscovery { $sName = $aMatches[1]; $sVersion = $aMatches[2]; + if ($sVersion === ""){ + $sVersion = "1.0.0"; + } } else { $sName = $sModuleId; - $sVersion = ""; + $sVersion = "1.0.0"; } - return array($sName, $sVersion); + + return [$sName, $sVersion]; } /** diff --git a/tests/php-unit-tests/unitary-tests/modulediscovery/ModuleDiscoveryTest.php b/tests/php-unit-tests/unitary-tests/modulediscovery/ModuleDiscoveryTest.php new file mode 100644 index 000000000..ec573f84c --- /dev/null +++ b/tests/php-unit-tests/unitary-tests/modulediscovery/ModuleDiscoveryTest.php @@ -0,0 +1,51 @@ + [ + 'sModuleId' => 'a/1.2.3', + 'name' => 'a', + 'version' => '1.2.3', + ], + 'develop' => [ + 'sModuleId' => 'a/1.2.3-dev', + 'name' => 'a', + 'version' => '1.2.3-dev', + ], + 'missing version => 1.0.0' => [ + 'sModuleId' => 'a/', + 'name' => 'a', + 'version' => '1.0.0', + ], + 'missing everything except name' => [ + 'sModuleId' => 'a', + 'name' => 'a', + 'version' => '1.0.0', + ], + ]; + } + + protected function setUp(): void + { + parent::setUp(); + + $this->RequireOnceItopFile('setup/modulediscovery.class.inc.php'); + } + + /** + * @dataProvider GetModuleNameProvider + */ + public function testGetModuleName($sModuleId, $expectedName, $expectedVersion) + { + $this->assertEquals([$expectedName, $expectedVersion], \ModuleDiscovery::GetModuleName($sModuleId)); + } + +}