diff --git a/setup/wizardsteps/WizStepModulesChoice.php b/setup/wizardsteps/WizStepModulesChoice.php
index 802f0f6f9..b7bb07884 100644
--- a/setup/wizardsteps/WizStepModulesChoice.php
+++ b/setup/wizardsteps/WizStepModulesChoice.php
@@ -478,6 +478,7 @@ EOF
* @param string $sParentId Used for recursion
*
* @return string A text representation of what will be installed
+ * @throws \Exception
*/
public function GetSelectedModules($aInfo, $aSelectedChoices, &$aModules, $sParentId = '', $sDisplayChoices = '', &$aSelectedExtensions = null)
{
@@ -507,8 +508,8 @@ EOF
(isset($aSelectedChoices[$sChoiceId]) && ($aSelectedChoices[$sChoiceId] == $sChoiceId))) {
$sDisplayChoices .= '
'.$aChoice['title'].'';
if (isset($aChoice['modules'])) {
- if (count($aChoice['modules']) === 0) {
- //throw new Exception('Extension '.$aChoice['extension_code'].' does not have any module associated');
+ if (count($aChoice['modules']) === 0 && (!isset($aChoice['missing']) || $aChoice['missing'] === false)) {
+ throw new Exception('Extension '.$aChoice['extension_code'].' does not have any module associated');
}
foreach ($aChoice['modules'] as $sModuleId) {
$bSelected = true;
diff --git a/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php b/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php
index 322878690..04429c87d 100644
--- a/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php
+++ b/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php
@@ -2,15 +2,13 @@
namespace Combodo\iTop\Test\UnitTest\Integration;
-use Combodo\iTop\Application\WebPage\WebPage;
use Combodo\iTop\Test\UnitTest\ItopTestCase;
-use iTopExtension;
use iTopExtensionsMap;
use iTopExtensionsMapFake;
use ModuleDiscovery;
+use WepPageFake;
use WizardController;
use WizStepModulesChoiceFake;
-use WepPageFake;
use XMLParameters;
class WizStepModulesChoiceTest extends ItopTestCase
@@ -930,6 +928,40 @@ class WizStepModulesChoiceTest extends ItopTestCase
$this->oStep->GetSelectedModules($aStepInfo, ['_0' => '_0'], $aModules, '', '', $aExtensions);
}
+ public function testGetSelectedModulesShouldNotThrowAnExceptionWhenAMandatoryModuleIsMissing()
+ {
+ $aExtensionsMapData = [];
+ $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' => true,
+ 'source_label' => '',
+ 'uninstallable' => true,
+ 'missing' => true,
+ ],
+ ],
+ ];
+
+ $aModules = [];
+ $aExtensions = [];
+ $this->oStep->GetSelectedModules($aStepInfo, ['_0' => '_0'], $aModules, '', '', $aExtensions);
+ $this->assertCount(0, $aModules);
+ $this->assertCount(1, $aExtensions);
+
+ }
+
public function ProviderDisplayOptions()
{
return [