diff --git a/setup/runtimeenv.class.inc.php b/setup/runtimeenv.class.inc.php
index 945e91322..2dd8a66d3 100644
--- a/setup/runtimeenv.class.inc.php
+++ b/setup/runtimeenv.class.inc.php
@@ -1029,4 +1029,4 @@ class RunTimeEnvironment
return sprintf("Checked %d classes in %.1f ms. No error found.\n", $iCount, $fDuration * 1000.0);
}
-} // End of class
\ No newline at end of file
+} // End of class
diff --git a/setup/wizardsteps.class.inc.php b/setup/wizardsteps.class.inc.php
index cdad225a8..88ce73756 100644
--- a/setup/wizardsteps.class.inc.php
+++ b/setup/wizardsteps.class.inc.php
@@ -1368,6 +1368,52 @@ class WizStepModulesChoice extends WizardStep
return ['WizStepModulesChoice', 'WizStepSummary'];
}
+ public function GetAddedAndRemovedExtensions($aSelectedExtensions)
+ {
+ $aExtensionsAdded = [];
+ $aExtensionsRemoved = [];
+ $aExtensionsNotUninstallable = [];
+ foreach ($this->oExtensionsMap->GetAllExtensionsWithPreviouslyInstalled() as $oExtension) {
+ /* @var \iTopExtension $oExtension */
+ $bSelected = in_array($oExtension->sCode, $aSelectedExtensions);
+ if ($oExtension->bInstalled && !$bSelected) {
+ $aExtensionsRemoved[$oExtension->sCode] = $oExtension->sLabel;
+ if (!$oExtension->CanBeUninstalled()) {
+ $aExtensionsNotUninstallable[$oExtension->sCode] = true;
+ }
+ } elseif (!$oExtension->bInstalled && $bSelected) {
+ $aExtensionsAdded[$oExtension->sCode] = $oExtension->sLabel;
+ }
+ }
+
+ $sExtensionsAdded = '';
+ if (count($aExtensionsAdded) > 0) {
+ $sExtensionsAdded = '
';
+ foreach ($aExtensionsAdded as $sExtensionCode) {
+ $sExtensionsAdded .= '- '.$sExtensionCode.'
';
+ }
+ $sExtensionsAdded .= '
';
+ } else {
+ $sExtensionsAdded = '';
+ }
+
+ $sExtensionsRemoved = '';
+ if (count($aExtensionsRemoved) > 0) {
+ $sExtensionsRemoved = '';
+ foreach ($aExtensionsRemoved as $sCode => $sExtensionCode) {
+ $sForcedUninstall = '';
+ if (isset($aExtensionsNotUninstallable[$sCode])) {
+ $sForcedUninstall = ' (forced uninstallation)';
+ }
+ $sExtensionsRemoved .= '- '.$sExtensionCode.$sForcedUninstall.'
';
+ }
+ $sExtensionsRemoved .= '
';
+ } else {
+ $sExtensionsRemoved = '';
+ }
+ return [$sExtensionsAdded, $sExtensionsRemoved];
+ }
+
public function ProcessParams($bMoveForward = true)
{
// Accumulates the selected modules:
@@ -1398,43 +1444,7 @@ class WizStepModulesChoice extends WizardStep
$this->oWizard->SetParameter('old_addon', true);
}
- $aExtensionsAdded = [];
- $aExtensionsRemoved = [];
- $aExtensionsNotUninstallable = [];
- foreach ($this->oExtensionsMap->GetAllExtensionsWithPreviouslyInstalled() as $oExtension) {
- /* @var \iTopExtension $oExtension */
- $bSelected = in_array($oExtension->sCode, $aExtensions);
- if ($oExtension->bInstalled && !$bSelected) {
- $aExtensionsRemoved[$oExtension->sCode] = $oExtension->sLabel;
- } elseif (!$oExtension->bInstalled && $bSelected) {
- $aExtensionsAdded[$oExtension->sCode] = $oExtension->sLabel;
- }
- if (!$oExtension->CanBeUninstalled()) {
- $aExtensionsNotUninstallable[$oExtension->sCode] = true;
- }
- }
-
- $sExtensionsAdded = '';
- if (count($aExtensionsAdded) > 0) {
- $sExtensionsAdded = '';
- foreach ($aExtensionsAdded as $sExtensionCode) {
- $sExtensionsAdded .= '- '.$sExtensionCode.'
';
- }
- $sExtensionsAdded .= '
';
- }
-
- $sExtensionsRemoved = '';
- if (count($aExtensionsRemoved) > 0) {
- $sExtensionsRemoved = '';
- foreach ($aExtensionsRemoved as $sCode => $sExtensionCode) {
- $sForcedUninstall = '';
- if (isset($aExtensionsNotUninstallable[$sCode])) {
- $sForcedUninstall = ' (forced uninstallation)';
- }
- $sExtensionsRemoved .= '- '.$sExtensionCode.$sForcedUninstall.'
';
- }
- $sExtensionsRemoved .= '
';
- }
+ [$sExtensionsAdded, $sExtensionsRemoved] = $this->GetAddedAndRemovedExtensions($aExtensions);
$this->oWizard->SetParameter('selected_modules', json_encode(array_keys($aModules)));
$this->oWizard->SetParameter('selected_extensions', json_encode($aExtensions));
diff --git a/tests/php-unit-tests/unitary-tests/datamodels/2.x/itop-config/ConfigTest/config-itop-joker.php b/tests/php-unit-tests/unitary-tests/datamodels/2.x/itop-config/ConfigTest/config-itop-joker.php
index 7c4a359c2..cbce0bb87 100644
--- a/tests/php-unit-tests/unitary-tests/datamodels/2.x/itop-config/ConfigTest/config-itop-joker.php
+++ b/tests/php-unit-tests/unitary-tests/datamodels/2.x/itop-config/ConfigTest/config-itop-joker.php
@@ -7,30 +7,26 @@
*
*
*/
-$MySettings = array(
-
-
+$MySettings = [
// app_root_url: Root URL used for navigating within the application, or from an email to the application (you can put $SERVER_NAME$ as a placeholder for the server's name)
// default: ''
'app_root_url' => 'http://%server(SERVER_NAME)?:localhost%/itop/iTop/',
-
-);
+];
/**
*
* Modules specific settings
*
*/
-$MyModuleSettings = array(
-);
+$MyModuleSettings = [
+];
/**
*
* Data model modules to be loaded. Names are specified as relative paths
*
*/
-$MyModules = array(
-);
-?>
\ No newline at end of file
+$MyModules = [
+];
diff --git a/tests/php-unit-tests/unitary-tests/datamodels/2.x/itop-config/ConfigTest/config-itop-var.php b/tests/php-unit-tests/unitary-tests/datamodels/2.x/itop-config/ConfigTest/config-itop-var.php
index a9e41ee35..3dc1986cd 100644
--- a/tests/php-unit-tests/unitary-tests/datamodels/2.x/itop-config/ConfigTest/config-itop-var.php
+++ b/tests/php-unit-tests/unitary-tests/datamodels/2.x/itop-config/ConfigTest/config-itop-var.php
@@ -7,30 +7,26 @@
*
*
*/
-$MySettings = array(
-
-
+$MySettings = [
// app_root_url: Root URL used for navigating within the application, or from an email to the application (you can put $SERVER_NAME$ as a placeholder for the server's name)
// default: ''
- 'app_root_url' => 'http://' . (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost') . '/itop/iTop/',
+ 'app_root_url' => 'http://'.(isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost').'/itop/iTop/',
-
-);
+];
/**
*
* Modules specific settings
*
*/
-$MyModuleSettings = array(
-);
+$MyModuleSettings = [
+];
/**
*
* Data model modules to be loaded. Names are specified as relative paths
*
*/
-$MyModules = array(
-);
-?>
\ No newline at end of file
+$MyModules = [
+];
diff --git a/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php b/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php
index 11a11fd46..7bdeac6af 100644
--- a/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php
+++ b/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php
@@ -257,4 +257,99 @@ class WizStepModulesChoiceTest extends ItopTestCase
$this->assertEquals($aExpectedFlags, $aFlags);
}
+ public function ProviderGetAddedAndRemovedExtensions()
+ {
+ return [
+ 'no extensions' => [
+ 'aExtensions' => [],
+
+ 'aSelected' => [],
+ 'sExpectedAddedList' => '',
+ 'sExpectedRemovedList' => '',
+ ],
+ 'no extensions selected' => [
+ 'aExtensions' => [
+ 'itop-ext1' => [
+ 'installed' => false,
+ ],
+ ],
+ 'aSelected' => [],
+ 'sExpectedAddedList' => '',
+ 'sExpectedRemovedList' => '',
+ ],
+ 'no extensions removed' => [
+ 'aExtensions' => [
+ 'itop-ext1' => [
+ 'installed' => true,
+ ],
+ ],
+ 'aSelected' => ['itop-ext1'],
+ 'sExpectedAddedList' => '',
+ 'sExpectedRemovedList' => '',
+ ],
+ 'One added extension' => [
+ 'aExtensions' => [
+ 'itop-ext1' => [
+ 'installed' => false,
+ ],
+ ],
+ 'aSelected' => ['itop-ext1'],
+ 'sExpectedAddedList' => '',
+ 'sExpectedRemovedList' => '',
+ ],
+ 'One removed extension' => [
+ 'aExtensions' => [
+ 'itop-ext1' => [
+ 'installed' => true,
+ ],
+ ],
+ 'aSelected' => [],
+ 'sExpectedAddedList' => '',
+ 'sExpectedRemovedList' => '',
+ ],
+ 'Forced removed extension' => [
+ 'aExtensions' => [
+ 'itop-ext1' => [
+ 'installed' => true,
+ 'uninstallable' => false,
+ ],
+ ],
+ 'aSelected' => [],
+ 'sExpectedAddedList' => '',
+ 'sExpectedRemovedList' => '- itop-ext1 (forced uninstallation)
',
+ ],
+ 'added and removed extensions' => [
+ 'aExtensions' => [
+ 'itop-ext-added1' => [
+ 'installed' => false,
+ ],
+ 'itop-ext-added2' => [
+ 'installed' => false,
+ ],
+ 'itop-ext-removed1' => [
+ 'installed' => true,
+ ],
+ 'itop-ext-removed2' => [
+ 'installed' => true,
+ ],
+ ],
+ 'aSelected' => ['itop-ext-added1', 'itop-ext-added2'],
+ 'sExpectedAddedList' => '- itop-ext-added1
- itop-ext-added2
',
+ 'sExpectedRemovedList' => '- itop-ext-removed1
- itop-ext-removed2
',
+ ],
+
+ ];
+ }
+
+ /**
+ * @dataProvider ProviderGetAddedAndRemovedExtensions
+ */
+ public function testGetAddedAndRemovedExtensions($aExtensions, $aSelectedExtensions, $sExpectedAddedList, $sExpectedRemovedList)
+ {
+ $this->oStep->setExtensionMap(iTopExtensionsMapFake::createFromArray($aExtensions));
+ [$sAddedList, $sRemovedList] = $this->oStep->GetAddedAndRemovedExtensions($aSelectedExtensions);
+ $this->assertEquals($sExpectedAddedList, $sAddedList);
+ $this->assertEquals($sExpectedRemovedList, $sRemovedList);
+ }
+
}
diff --git a/tests/php-unit-tests/unitary-tests/setup/iTopExtensionsMapFake.php b/tests/php-unit-tests/unitary-tests/setup/iTopExtensionsMapFake.php
index e80b88eb6..ff1a204af 100644
--- a/tests/php-unit-tests/unitary-tests/setup/iTopExtensionsMapFake.php
+++ b/tests/php-unit-tests/unitary-tests/setup/iTopExtensionsMapFake.php
@@ -12,9 +12,11 @@ class iTopExtensionsMapFake extends iTopExtensionsMap
public static function createFromArray($aExtensions)
{
$oMap = new static();
+
foreach ($aExtensions as $sCode => $aExtension) {
$oExtension = new iTopExtension();
$oExtension->sCode = $sCode;
+ $oExtension->sLabel = $sCode;
$oExtension->bInstalled = $aExtension['installed'];
$oExtension->aModules = $aExtension['modules'] ?? [];
$oExtension->bCanBeUninstalled = $aExtension['uninstallable'] ?? null;