mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-26 03:58:45 +02:00
refactoring: code cleanup/standardization/remove all prototype stuffs
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
namespace Combodo\iTop\Test\UnitTest\Setup;
|
||||
|
||||
use Combodo\iTop\Test\UnitTest\ItopDataTestCase;
|
||||
use iTopCoreModuleDependencySort;
|
||||
use MissingDependencyException;
|
||||
use ModuleDiscovery;
|
||||
|
||||
@@ -14,29 +13,7 @@ class ModuleDiscoveryTest extends ItopDataTestCase
|
||||
$this->RequireOnceItopFile('setup/modulediscovery.class.inc.php');
|
||||
}
|
||||
|
||||
public static function CheckMissingDependenciesAreCorrectlyOrderedInTheExceptionProvider()
|
||||
{
|
||||
$sLegacyExpectedMessage = <<<MSG
|
||||
The following modules have unmet dependencies:
|
||||
label1 (id: id1/123) depends on: ❌ id3/666 + ❌ id4/666,
|
||||
label2 (id: id2/456) depends on: ❌ id3/666
|
||||
MSG;
|
||||
$sExpectedMessage = <<<MSG
|
||||
The following modules have unmet dependencies:
|
||||
label2 (id: id2/456) depends on: ❌ id3/666,
|
||||
label1 (id: id1/123) depends on: ❌ id3/666 + ❌ id4/666
|
||||
MSG;
|
||||
|
||||
return [
|
||||
'legacy' => [ 'message' => $sLegacyExpectedMessage, 'is_legacy' => true ],
|
||||
'new computation' => [ 'message' => $sExpectedMessage, 'is_legacy' => false ],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider CheckMissingDependenciesAreCorrectlyOrderedInTheExceptionProvider
|
||||
*/
|
||||
public function testOrderModulesByDependencies_CheckMissingDependenciesAreCorrectlyOrderedInTheException(string $sMessage, bool $bIsLegacy)
|
||||
public function testOrderModulesByDependencies_CheckMissingDependenciesAreCorrectlyOrderedInTheException()
|
||||
{
|
||||
$aModules=[
|
||||
"id1/123" => [
|
||||
@@ -49,39 +26,18 @@ MSG;
|
||||
],
|
||||
];
|
||||
|
||||
$this->expectException(MissingDependencyException::class);
|
||||
$this->expectExceptionMessage($sMessage);
|
||||
|
||||
if ($bIsLegacy){
|
||||
ModuleDiscovery::OrderModulesByDependencies($aModules, true, null);
|
||||
} else {
|
||||
iTopCoreModuleDependencySort::OrderModulesByDependencies($aModules, true, null);
|
||||
}
|
||||
}
|
||||
|
||||
public static function ValidateExceptionWithSomeDependenciesResolvedProvider()
|
||||
{
|
||||
$sExpectedMessage = <<<MSG
|
||||
The following modules have unmet dependencies:
|
||||
label3 (id: id3/789) depends on: ✅ id2/456 + ❌ id4/666,
|
||||
label1 (id: id1/123) depends on: ✅ id2/456 + ❌ id4/666 + ❌ id3/789
|
||||
MSG;
|
||||
$sLegacyExpectedMessage = <<<MSG
|
||||
The following modules have unmet dependencies:
|
||||
label1 (id: id1/123) depends on: ✅ id2/456 + ❌ id4/666 + ❌ id3/789,
|
||||
label3 (id: id3/789) depends on: ✅ id2/456 + ❌ id4/666
|
||||
label2 (id: id2/456) depends on: ❌ id3/666,
|
||||
label1 (id: id1/123) depends on: ❌ id3/666 + ❌ id4/666
|
||||
MSG;
|
||||
$this->expectException(MissingDependencyException::class);
|
||||
$this->expectExceptionMessage($sExpectedMessage);
|
||||
|
||||
return [
|
||||
'legacy' => [ 'message' => $sLegacyExpectedMessage, 'is_legacy' => true ],
|
||||
'new computation' => [ 'message' => $sExpectedMessage, 'is_legacy' => false ],
|
||||
];
|
||||
ModuleDiscovery::OrderModulesByDependencies($aModules, true, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider ValidateExceptionWithSomeDependenciesResolvedProvider
|
||||
*/
|
||||
public function testOrderModulesByDependencies_ValidateExceptionWithSomeDependenciesResolved(string $sMessage, bool $bIsLegacy)
|
||||
public function testOrderModulesByDependencies_ValidateExceptionWithSomeDependenciesResolved()
|
||||
{
|
||||
$aModules=[
|
||||
"id1/123" => [
|
||||
@@ -98,14 +54,15 @@ MSG;
|
||||
],
|
||||
];
|
||||
|
||||
$sExpectedMessage = <<<MSG
|
||||
The following modules have unmet dependencies:
|
||||
label3 (id: id3/789) depends on: ✅ id2/456 + ❌ id4/666,
|
||||
label1 (id: id1/123) depends on: ✅ id2/456 + ❌ id4/666 + ❌ id3/789
|
||||
MSG;
|
||||
$this->expectException(MissingDependencyException::class);
|
||||
$this->expectExceptionMessage($sMessage);
|
||||
$this->expectExceptionMessage($sExpectedMessage);
|
||||
|
||||
if ($bIsLegacy){
|
||||
ModuleDiscovery::OrderModulesByDependencies($aModules, true, null);
|
||||
} else {
|
||||
iTopCoreModuleDependencySort::OrderModulesByDependencies($aModules, true, null);
|
||||
}
|
||||
ModuleDiscovery::OrderModulesByDependencies($aModules, true, null);
|
||||
}
|
||||
|
||||
public function testOrderModulesByDependencies_KeepGoingEvenWithFailure_WithSomeDependenciesResolved()
|
||||
@@ -125,44 +82,16 @@ MSG;
|
||||
],
|
||||
];
|
||||
|
||||
$aResult = iTopCoreModuleDependencySort::OrderModulesByDependencies($aModules, false, null);
|
||||
$aLegacyResult = ModuleDiscovery::OrderModulesByDependencies($aModules, false, null);
|
||||
$aResult = ModuleDiscovery::OrderModulesByDependencies($aModules, false, null);
|
||||
|
||||
$aExpected = [
|
||||
'id2/456',
|
||||
];
|
||||
|
||||
$this->assertEquals($aExpected, array_keys($aLegacyResult));
|
||||
$this->assertEquals( $aLegacyResult, $aResult);
|
||||
$this->assertEquals($aExpected, array_keys($aResult));
|
||||
}
|
||||
|
||||
public static function UnResolveWithCircularDependencyProvider()
|
||||
{
|
||||
$sExpectedMessage = <<<MSG
|
||||
The following modules have unmet dependencies:
|
||||
label1 (id: id1/1) depends on: ❌ id2/2,
|
||||
label4 (id: id4/4) depends on: ❌ id1/1,
|
||||
label3 (id: id3/3) depends on: ❌ id4/4,
|
||||
label2 (id: id2/2) depends on: ❌ id3/3
|
||||
MSG;
|
||||
$sLegacyExpectedMessage = <<<MSG
|
||||
The following modules have unmet dependencies:
|
||||
label1 (id: id1/1) depends on: ❌ id2/2,
|
||||
label2 (id: id2/2) depends on: ❌ id3/3,
|
||||
label3 (id: id3/3) depends on: ❌ id4/4,
|
||||
label4 (id: id4/4) depends on: ❌ id1/1
|
||||
MSG;
|
||||
|
||||
return [
|
||||
'legacy' => [ 'message' => $sLegacyExpectedMessage, 'is_legacy' => true ],
|
||||
'new computation' => [ 'message' => $sExpectedMessage, 'is_legacy' => false ],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider UnResolveWithCircularDependencyProvider
|
||||
*/
|
||||
public function testOrderModulesByDependencies_UnResolveWithCircularDependency(string $sMessage, bool $bIsLegacy)
|
||||
public function testOrderModulesByDependencies_UnResolveWithCircularDependency()
|
||||
{
|
||||
$aModules=[
|
||||
"id1/1" => [
|
||||
@@ -183,14 +112,17 @@ MSG;
|
||||
],
|
||||
];
|
||||
|
||||
$sExpectedMessage = <<<MSG
|
||||
The following modules have unmet dependencies:
|
||||
label1 (id: id1/1) depends on: ❌ id2/2,
|
||||
label4 (id: id4/4) depends on: ❌ id1/1,
|
||||
label3 (id: id3/3) depends on: ❌ id4/4,
|
||||
label2 (id: id2/2) depends on: ❌ id3/3
|
||||
MSG;
|
||||
$this->expectException(MissingDependencyException::class);
|
||||
$this->expectExceptionMessage($sMessage);
|
||||
$this->expectExceptionMessage($sExpectedMessage);
|
||||
|
||||
if ($bIsLegacy){
|
||||
ModuleDiscovery::OrderModulesByDependencies($aModules, true, null);
|
||||
} else {
|
||||
iTopCoreModuleDependencySort::OrderModulesByDependencies($aModules, true, null);
|
||||
}
|
||||
ModuleDiscovery::OrderModulesByDependencies($aModules, true, null);
|
||||
}
|
||||
|
||||
public function testOrderModulesByDependencies_ResolveOk()
|
||||
@@ -226,13 +158,50 @@ MSG;
|
||||
"id0/1",
|
||||
];
|
||||
|
||||
$aResult = iTopCoreModuleDependencySort::OrderModulesByDependencies($aModules, true, null);
|
||||
$aLegacyResult = ModuleDiscovery::OrderModulesByDependencies($aModules, true, null);
|
||||
$aResult = ModuleDiscovery::OrderModulesByDependencies($aModules, true, null);
|
||||
|
||||
$this->assertEquals($aExpected, array_keys($aLegacyResult));
|
||||
$this->assertEquals( $aLegacyResult, $aResult);
|
||||
$this->assertEquals($aExpected, array_keys($aResult));
|
||||
}
|
||||
|
||||
public function testOrderModulesByDependencies_ResolveOk2()
|
||||
{
|
||||
$aModules=[
|
||||
"id0/1" => [
|
||||
'dependencies' => [ 'id2/2'],
|
||||
'label' => 'label1',
|
||||
],
|
||||
"id1/1" => [
|
||||
'dependencies' => [ 'id2/2'],
|
||||
'label' => 'label1',
|
||||
],
|
||||
"id2/2" => [
|
||||
'dependencies' => ['id3/3'],
|
||||
'label' => 'label2',
|
||||
],
|
||||
"id3/3" => [
|
||||
'dependencies' => ['id4/4'],
|
||||
'label' => 'label3',
|
||||
],
|
||||
"id4/4" => [
|
||||
'dependencies' => [],
|
||||
'label' => 'label4',
|
||||
],
|
||||
];
|
||||
|
||||
$aExpected = [
|
||||
"id4/4",
|
||||
"id3/3",
|
||||
"id2/2",
|
||||
"id0/1",
|
||||
"id1/1",
|
||||
];
|
||||
|
||||
$aResult = ModuleDiscovery::OrderModulesByDependencies($aModules, true, null);
|
||||
|
||||
$this->assertEquals($aExpected, array_keys($aResult));
|
||||
}
|
||||
|
||||
|
||||
public function testOrderModulesByDependencies_ResolveNoDependendenciesOrderByAlphabeticalOrder()
|
||||
{
|
||||
$aModules=[
|
||||
@@ -266,11 +235,9 @@ MSG;
|
||||
"id4/4",
|
||||
];
|
||||
|
||||
$aResult = iTopCoreModuleDependencySort::OrderModulesByDependencies($aModules, true, null);
|
||||
$aLegacyResult = ModuleDiscovery::OrderModulesByDependencies($aModules, true, null);
|
||||
$aResult = ModuleDiscovery::OrderModulesByDependencies($aModules, true, null);
|
||||
|
||||
$this->assertEquals($aExpected, array_keys($aLegacyResult));
|
||||
$this->assertEquals( $aLegacyResult, $aResult);
|
||||
$this->assertEquals($aExpected, array_keys($aResult));
|
||||
}
|
||||
|
||||
public function testOrderModulesByDependencies_ResolveOk_ModulesToLoadProvided()
|
||||
@@ -301,103 +268,20 @@ MSG;
|
||||
"id1/1",
|
||||
];
|
||||
|
||||
$aResult = iTopCoreModuleDependencySort::OrderModulesByDependencies($aModules, true, ['id1', 'id2', $sLastModuleNameToLoad]);
|
||||
$aLegacyResult = ModuleDiscovery::OrderModulesByDependencies($aModules, true, ['id1', 'id2', $sLastModuleNameToLoad]);
|
||||
$aResult = ModuleDiscovery::OrderModulesByDependencies($aModules, true, ['id1', 'id2', $sLastModuleNameToLoad]);
|
||||
|
||||
$this->assertEquals($aExpected, array_keys($aLegacyResult));
|
||||
$this->assertEquals( $aLegacyResult, $aResult);
|
||||
$this->assertEquals($aExpected, array_keys($aResult));
|
||||
}
|
||||
}
|
||||
|
||||
public function testOrderModulesByDependenciesNewComputation_RealExample(){
|
||||
$aModules = json_decode(file_get_contents(__DIR__ . '/ressources/module_deps.json'), true);
|
||||
|
||||
$aResult = iTopCoreModuleDependencySort::OrderModulesByDependencies($aModules, true, null);
|
||||
//$aResult = iTopCoreModuleDependencySort::OrderModulesByDependencies($aModules, true, null);
|
||||
$aLegacyResult = ModuleDiscovery::OrderModulesByDependencies($aModules, true, null);
|
||||
|
||||
$aExpected = json_decode(file_get_contents(__DIR__ . '/ressources/expected_ordered_module_ids.json'), true);
|
||||
$this->assertEquals( $aLegacyResult, $aResult);
|
||||
//$this->assertEquals( $aLegacyResult, $aResult);
|
||||
$this->assertEquals($aExpected, array_keys($aLegacyResult));
|
||||
}
|
||||
|
||||
public function testSortModulesByCountOfDepencenciesDescending_NoDependencies(){
|
||||
$aUnresolvedDependencyModules = [];
|
||||
foreach (['c', 'b', 'a'] as $sModuleId){
|
||||
$this->AddModule($aUnresolvedDependencyModules, $sModuleId, []);
|
||||
}
|
||||
iTopCoreModuleDependencySort::GetInstance()->SortModulesByCountOfDepencenciesDescending($aUnresolvedDependencyModules);
|
||||
$this->assertEquals(['a', 'b', 'c'], array_keys($aUnresolvedDependencyModules));
|
||||
}
|
||||
|
||||
public function testSortModulesByCountOfDepencenciesDescending_NominalUseCase(){
|
||||
$aUnresolvedDependencyModules = [];
|
||||
$this->AddModule($aUnresolvedDependencyModules, 'itop-change-mgmt/456', ['itop-config-mgmt/2.2.0', 'itop-tickets/2.0.0']);
|
||||
$this->AddModule($aUnresolvedDependencyModules, 'itop-tickets/2.0.0', ['itop-structure/2.7.1']);
|
||||
$this->AddModule($aUnresolvedDependencyModules, 'itop-config-mgmt/123', ['itop-structure/2.7.1']);
|
||||
$this->AddModule($aUnresolvedDependencyModules, 'itop-structure/2.7.1', []);
|
||||
|
||||
iTopCoreModuleDependencySort::GetInstance()->SortModulesByCountOfDepencenciesDescending($aUnresolvedDependencyModules);
|
||||
$this->assertEquals(
|
||||
[
|
||||
'itop-structure/2.7.1',
|
||||
'itop-config-mgmt/123',
|
||||
'itop-tickets/2.0.0',
|
||||
'itop-change-mgmt/456',
|
||||
], array_keys($aUnresolvedDependencyModules));
|
||||
}
|
||||
|
||||
public function testSortModulesByCountOfDepencenciesDescending_NominalUseCaseWithMissingDependency(){
|
||||
$aUnresolvedDependencyModules = [];
|
||||
$this->AddModule($aUnresolvedDependencyModules, 'itop-change-mgmt/456', ['itop-config-mgmt/2.2.0', 'itop-tickets/2.0.0']);
|
||||
$this->AddModule($aUnresolvedDependencyModules, 'itop-tickets/2.0.0', ['itop-structure/2.7.1']);
|
||||
$this->AddModule($aUnresolvedDependencyModules, 'itop-config-mgmt/123', ['itop-structure/2.7.1']);
|
||||
|
||||
iTopCoreModuleDependencySort::GetInstance()->SortModulesByCountOfDepencenciesDescending($aUnresolvedDependencyModules);
|
||||
$this->assertEquals(
|
||||
[
|
||||
'itop-config-mgmt/123',
|
||||
'itop-tickets/2.0.0',
|
||||
'itop-change-mgmt/456',
|
||||
],
|
||||
array_keys($aUnresolvedDependencyModules));
|
||||
}
|
||||
|
||||
public function testSortModulesByCountOfDepencenciesDescending_FurtherVersionsOfSameModule(){
|
||||
$aUnresolvedDependencyModules = [];
|
||||
$this->AddModule($aUnresolvedDependencyModules, 'moduleA/1', []);
|
||||
$this->AddModule($aUnresolvedDependencyModules, 'moduleA/2', ['moduleC/1']);
|
||||
$this->AddModule($aUnresolvedDependencyModules, 'moduleB/1', ['moduleA/1']);
|
||||
$this->AddModule($aUnresolvedDependencyModules, 'moduleC/1', []);
|
||||
|
||||
iTopCoreModuleDependencySort::GetInstance()->SortModulesByCountOfDepencenciesDescending($aUnresolvedDependencyModules);
|
||||
$this->assertEquals(
|
||||
[
|
||||
'moduleA/1',
|
||||
'moduleC/1',
|
||||
'moduleA/2',
|
||||
'moduleB/1',
|
||||
],
|
||||
array_keys($aUnresolvedDependencyModules));
|
||||
}
|
||||
|
||||
private function AddModule(array &$aUnresolvedDependencyModules, string $sModuleId, array $aDeps){
|
||||
$oModule = new \iTopCoreModule($sModuleId);
|
||||
$oModule->SetDependencies($aDeps);
|
||||
$aUnresolvedDependencyModules[$sModuleId]= $oModule;
|
||||
}
|
||||
|
||||
public function testSortModulesByCountOfDepencenciesDescending_RealExample(){
|
||||
$aUnresolvedDependencyModules = [];
|
||||
$aDependencies = json_decode(file_get_contents(__DIR__ . '/ressources/module_deps.json'), true);
|
||||
foreach ($aDependencies as $sModuleId => $aModuleData){
|
||||
$this->AddModule($aUnresolvedDependencyModules, $sModuleId, $aModuleData['dependencies']);
|
||||
}
|
||||
|
||||
iTopCoreModuleDependencySort::GetInstance()->SortModulesByCountOfDepencenciesDescending($aUnresolvedDependencyModules);
|
||||
|
||||
$aExpected = json_decode(file_get_contents(__DIR__ . '/ressources/expected_ordered_module_ids2.json'), true);
|
||||
$this->assertEquals(
|
||||
$aExpected,
|
||||
array_keys($aUnresolvedDependencyModules));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user