diff --git a/setup/wizardsteps/WizStepModulesChoice.php b/setup/wizardsteps/WizStepModulesChoice.php
index 2fd85f42a..98a610c9e 100644
--- a/setup/wizardsteps/WizStepModulesChoice.php
+++ b/setup/wizardsteps/WizStepModulesChoice.php
@@ -48,7 +48,7 @@ class WizStepModulesChoice extends WizardStep
*/
protected bool $bChoicesFromDatabase;
- private array $aAnalyzeInstallationModules;
+ private array $aAnalyzeInstallationModules = [];
private ?MissingDependencyException $oMissingDependencyException = null;
public function __construct(WizardController $oWizard, $sCurrentState)
@@ -486,7 +486,7 @@ EOF
*
* @return string A text representation of what will be installed
*/
- protected function GetSelectedModules($aInfo, $aSelectedChoices, &$aModules, $sParentId = '', $sDisplayChoices = '', &$aSelectedExtensions = null)
+ public function GetSelectedModules($aInfo, $aSelectedChoices, &$aModules, $sParentId = '', $sDisplayChoices = '', &$aSelectedExtensions = null)
{
if ($sParentId == '') {
// Check once (before recursing) that the hidden modules are selected
@@ -514,6 +514,9 @@ EOF
(isset($aSelectedChoices[$sChoiceId]) && ($aSelectedChoices[$sChoiceId] == $sChoiceId))) {
$sDisplayChoices .= '
'.$aChoice['title'].'';
if (isset($aChoice['modules'])) {
+ if (count($aChoice['modules']) === 0) {
+ throw new Exception('Setup option does not have any module associated');
+ }
foreach ($aChoice['modules'] as $sModuleId) {
$bSelected = true;
if (isset($aModuleInfo[$sModuleId])) {
diff --git a/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php b/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php
index 9d21471de..cb120b8e0 100644
--- a/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php
+++ b/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php
@@ -559,4 +559,99 @@ class WizStepModulesChoiceTest extends ItopTestCase
return $aSteps[$index] ?? null;
}
+
+ public function ProviderGetSelectedModules()
+ {
+ return [
+ 'No extension selected' => [
+ 'aSelected' => [],
+ 'aExpectedModules' => [],
+ 'aExpectedExtensions' => [],
+ ],
+ 'One extension selected' => [
+ 'aSelected' => ['_0' => '_0'],
+ 'aExpectedModules' => ['combodo-sample-module' => true],
+ 'aExpectedExtensions' => ['combodo-sample'],
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider ProviderGetSelectedModules
+ */
+ public function testGetSelectedModules($aSelectedExtensions, $aExpectedModules, $aExpectedExtensions)
+ {
+ $aExtensionsMapData = [
+ 'combodo-sample' => [
+ 'installed' => false,
+ ],
+ ];
+ $this->oStep->setExtensionMap(iTopExtensionsMapFake::createFromArray($aExtensionsMapData, ));
+
+ //GetSelectedModules
+ $aStepInfo = [
+ 'title' => 'Extensions',
+ 'description' => '',
+ 'banner' => '',
+ 'options' => [
+ [
+ 'extension_code' => 'combodo-sample',
+ 'title' => 'Sample extension',
+ 'description' => '',
+ 'more_info' => '',
+ 'default' => true,
+ 'modules' => [
+ 'combodo-sample-module',
+ ],
+ 'mandatory' => false,
+ 'source_label' => '',
+ 'uninstallable' => true,
+ 'missing' => false,
+ ],
+ ],
+ ];
+
+ $aModules = [];
+ $aExtensions = [];
+ $this->oStep->GetSelectedModules($aStepInfo, $aSelectedExtensions, $aModules, '', '', $aExtensions);
+ $this->assertEquals($aExpectedModules, $aModules);
+ $this->assertEquals($aExpectedExtensions, $aExtensions);
+ }
+
+ public function testGetSelectedModulesShouldThrowAnExceptionWhenAnySelectedExtensionDoesNotHaveAnyAssociatedModules()
+ {
+ $aExtensionsMapData = [
+ 'combodo-sample' => [
+ 'installed' => false,
+ ],
+ ];
+ $this->oStep->setExtensionMap(iTopExtensionsMapFake::createFromArray($aExtensionsMapData, ));
+
+ //GetSelectedModules
+ $aStepInfo = [
+ 'title' => 'Extensions',
+ 'description' => '',
+ 'banner' => '',
+ 'options' => [
+ [
+ 'extension_code' => 'combodo-sample',
+ 'title' => 'Sample extension',
+ 'description' => '',
+ 'more_info' => '',
+ 'default' => true,
+ 'modules' => [],
+ 'mandatory' => false,
+ 'source_label' => '',
+ 'uninstallable' => true,
+ 'missing' => false,
+ ],
+ ],
+ ];
+
+ $aModules = [];
+ $aExtensions = [];
+ $this->expectException('Exception');
+ $this->oStep->GetSelectedModules($aStepInfo, ['_0' => '_0'], $aModules, '', '', $aExtensions);
+ }
+
}