diff --git a/tests/php-unit-tests/post-build-integration-tests/iTopModuleXmlInstallationChecklistTest.php b/tests/php-unit-tests/post-build-integration-tests/iTopModuleXmlInstallationChecklistTest.php index cf90c2704f..b9b88a7ce3 100644 --- a/tests/php-unit-tests/post-build-integration-tests/iTopModuleXmlInstallationChecklistTest.php +++ b/tests/php-unit-tests/post-build-integration-tests/iTopModuleXmlInstallationChecklistTest.php @@ -52,22 +52,27 @@ class iTopModuleXmlInstallationChecklistTest extends ItopTestCase } } - $aFilteredModulesFromDatamodels = $this->GetFilteredModulesFromDatamodels(APPROOT.'/datamodels'); - $this->assertCount( - 0, - array_diff($aFilteredModulesFromDatamodels, array_intersect($aFilteredModulesFromDatamodels, $aDeclaredModules)), - "{$sInstallationXmlPath} does not list all modules in /datamodels ! List of modules in installation.xml:\n ".var_export($aDeclaredModules, true) - ); + $aIssues = []; + + $aFilteredModulesFromDatamodels = $this->GetModulesNotAutoSelected(APPROOT.'/datamodels'); + $aMissingModules = array_diff($aFilteredModulesFromDatamodels, $aDeclaredModules); + $sMissingModules = implode(', ', $aMissingModules); + if (count($aMissingModules) > 0) { + $aIssues[] = "Does not reference the following modules: {$sMissingModules}. Those modules are in the directory datamodels and they are not configured for automatic installation. They will never be installed in this package."; + } $aModulesFromDatamodels = $this->GetAllModules(APPROOT.'/datamodels'); - $this->assertCount( - 0, - array_diff($aDeclaredModules, array_intersect($aDeclaredModules, $aModulesFromDatamodels)), - "Not all modules are contained in {$sInstallationXmlPath}. List of modules in /datamodels:\n ".var_export($aModulesFromDatamodels, true) - ); + $aMissingModules = array_diff($aDeclaredModules, $aModulesFromDatamodels); + $sMissingModules = implode(', ', $aMissingModules); + if (count($aMissingModules) > 0) { + $aIssues[] = "References unknown modules: $sMissingModules. Those modules are not in the datamodels directory. This will prevent the installation of the package."; + } + if (count($aIssues) > 0) { + $this->fail("Encountered ".count($aIssues)." issue(s) in {$sInstallationXmlPath}:\n- ".implode("\n- ", $aIssues)); + } } - public function GetFilteredModulesFromDatamodels($sFolder) + public function GetModulesNotAutoSelected($sFolder) { $aExcludedModules = ['authent-external', 'authent-ldap']; $aModules = array(); @@ -78,7 +83,7 @@ class iTopModuleXmlInstallationChecklistTest extends ItopTestCase if (is_dir($sPath)) { /** @noinspection SlowArrayOperationsInLoopInspection */ - $aModules = array_merge($aModules, $this->GetFilteredModulesFromDatamodels($sPath)); + $aModules = array_merge($aModules, $this->GetModulesNotAutoSelected($sPath)); } else if (preg_match("/module\..*\.php/", basename($sPath))) {