mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-28 22:54:12 +01:00
N°8981: test ModuleDiscovery filtered by removed extensions
This commit is contained in:
@@ -2,7 +2,9 @@
|
||||
|
||||
namespace Combodo\iTop\Test\UnitTest\Setup;
|
||||
|
||||
use Combodo\iTop\Setup\ModuleDiscovery\ModuleFileReader;
|
||||
use Combodo\iTop\Test\UnitTest\ItopTestCase;
|
||||
use iTopExtension;
|
||||
use MissingDependencyException;
|
||||
use ModuleDiscovery;
|
||||
|
||||
@@ -15,6 +17,12 @@ class ModuleDiscoveryTest extends ItopTestCase
|
||||
$this->RequireOnceItopFile('setup/modulediscovery.class.inc.php');
|
||||
}
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
parent::tearDown();
|
||||
ModuleDiscovery::DeclareRemovedExtensions([]);
|
||||
}
|
||||
|
||||
public function testOrderModulesByDependencies_RealExample()
|
||||
{
|
||||
$aModules = json_decode(file_get_contents(__DIR__.'/ressources/reallife_discovered_modules.json'), true);
|
||||
@@ -78,6 +86,41 @@ TXT;
|
||||
ModuleDiscovery::OrderModulesByDependencies($aModules, true, $aChoices);
|
||||
}
|
||||
|
||||
public function testOrderModulesByDependencies_FailWhenChoosenModuleDependsOnRemovedExtensionModule()
|
||||
{
|
||||
$aChoices = ['id1', 'id2'];
|
||||
|
||||
$sModuleFilePath = tempnam(sys_get_temp_dir(), 'discovery_test');
|
||||
$this->aFileToClean[] = $sModuleFilePath;
|
||||
$sModuleFilePath2 = tempnam(sys_get_temp_dir(), 'discovery_test');
|
||||
$this->aFileToClean[] = $sModuleFilePath2;
|
||||
|
||||
$aModules = [
|
||||
"id1/1" => [
|
||||
'dependencies' => [ 'id2/2'],
|
||||
'label' => 'label1',
|
||||
ModuleFileReader::MODULE_FILE_PATH => $sModuleFilePath,
|
||||
],
|
||||
"id2/2" => [
|
||||
'dependencies' => [],
|
||||
'label' => 'label2',
|
||||
ModuleFileReader::MODULE_FILE_PATH => $sModuleFilePath2,
|
||||
],
|
||||
];
|
||||
|
||||
$oExtension = $this->CreateExtensionWithModule('id2', '2', $sModuleFilePath2);
|
||||
ModuleDiscovery::DeclareRemovedExtensions([$oExtension]);
|
||||
|
||||
$sExpectedMessage = <<<TXT
|
||||
The following modules have unmet dependencies:
|
||||
label1 (id: id1/1) depends on: ❌ id2/2
|
||||
TXT;
|
||||
$this->expectException(MissingDependencyException::class);
|
||||
$this->expectExceptionMessage($sExpectedMessage);
|
||||
|
||||
ModuleDiscovery::OrderModulesByDependencies($aModules, true, $aChoices);
|
||||
}
|
||||
|
||||
public function GetModuleNameProvider()
|
||||
{
|
||||
return [
|
||||
@@ -109,6 +152,63 @@ TXT;
|
||||
*/
|
||||
public function testGetModuleName($sModuleId, $expectedName, $expectedVersion)
|
||||
{
|
||||
$this->assertEquals([$expectedName, $expectedVersion], \ModuleDiscovery::GetModuleName($sModuleId));
|
||||
$this->assertEquals([$expectedName, $expectedVersion], ModuleDiscovery::GetModuleName($sModuleId));
|
||||
}
|
||||
|
||||
public function testIsModulePartOfRemovedExtension_NoRemovedExtension()
|
||||
{
|
||||
ModuleDiscovery::DeclareRemovedExtensions([]);
|
||||
$this->assertFalse($this->InvokeNonPublicStaticMethod(ModuleDiscovery::class, "IsModulePartOfRemovedExtension", ['module_name', '123', []]));
|
||||
}
|
||||
|
||||
public function testIsModulePartOfRemovedExtension_ModuleWithAnotherVersionIncludedInRemoveExtension()
|
||||
{
|
||||
$sModuleFilePath = tempnam(sys_get_temp_dir(), 'discovery_test');
|
||||
$this->ValidateIsModulePartOfRemovedExtension('module_name', '123', $sModuleFilePath, $sModuleFilePath, false);
|
||||
}
|
||||
|
||||
public function testIsModulePartOfRemovedExtension_AnotherModuleWithSameVersionIncludedInRemoveExtension()
|
||||
{
|
||||
$sModuleFilePath = tempnam(sys_get_temp_dir(), 'discovery_test');
|
||||
$this->ValidateIsModulePartOfRemovedExtension('another_module_name', '456', $sModuleFilePath, $sModuleFilePath, false);
|
||||
}
|
||||
|
||||
public function testIsModulePartOfRemovedExtension_SameExtensionComingFromAnotherLocation()
|
||||
{
|
||||
$sModuleFilePath = tempnam(sys_get_temp_dir(), 'discovery_test');
|
||||
$sModuleFilePath2 = tempnam(sys_get_temp_dir(), 'discovery_test');
|
||||
$this->ValidateIsModulePartOfRemovedExtension('module_name', '456', $sModuleFilePath, $sModuleFilePath2, false);
|
||||
}
|
||||
|
||||
public function testIsModulePartOfRemovedExtension_ModuleShouldBeExcluded()
|
||||
{
|
||||
$sModuleFilePath = tempnam(sys_get_temp_dir(), 'discovery_test');
|
||||
$this->ValidateIsModulePartOfRemovedExtension('module_name', '456', $sModuleFilePath, $sModuleFilePath, true);
|
||||
}
|
||||
|
||||
public function ValidateIsModulePartOfRemovedExtension($sModuleName, $sModuleVersion, $sModuleFilePath1, $sModuleFilePath2, $bExpected)
|
||||
{
|
||||
$this->aFileToClean[] = $sModuleFilePath1;
|
||||
$this->aFileToClean[] = $sModuleFilePath2;
|
||||
|
||||
$oExtension = $this->CreateExtensionWithModule('module_name', '456', $sModuleFilePath2);
|
||||
ModuleDiscovery::DeclareRemovedExtensions([$oExtension]);
|
||||
$aCurrentModuleInfo = [
|
||||
ModuleFileReader::MODULE_FILE_PATH => $sModuleFilePath1,
|
||||
];
|
||||
$this->assertEquals(
|
||||
$bExpected,
|
||||
$this->InvokeNonPublicStaticMethod(ModuleDiscovery::class, "IsModulePartOfRemovedExtension", [$sModuleName, $sModuleVersion, $aCurrentModuleInfo])
|
||||
);
|
||||
}
|
||||
|
||||
private function CreateExtensionWithModule(string $sModuleName, string $sVersion, bool|string $sModuleFilePath): iTopExtension
|
||||
{
|
||||
$oExt = new iTopExtension();
|
||||
$oExt->aModuleVersion[$sModuleName] = $sVersion;
|
||||
$oExt->aModuleInfo[$sModuleName] = [
|
||||
ModuleFileReader::MODULE_FILE_PATH => $sModuleFilePath,
|
||||
];
|
||||
return $oExt;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user