diff --git a/test/releaseChecklist/iTopModuleXmlInstallationChecklistTest.php b/test/releaseChecklist/iTopModuleXmlInstallationChecklistTest.php new file mode 100644 index 000000000..dd48215e3 --- /dev/null +++ b/test/releaseChecklist/iTopModuleXmlInstallationChecklistTest.php @@ -0,0 +1,91 @@ +assertTrue(is_file($sInstallationXmlPath), "$sInstallationXmlPath does not exist"); + + $doc = new \DOMDocument(); + try{ + $doc->loadxml(file_get_contents($sInstallationXmlPath)); + } + catch(\Exception $e) + { + $this->assertFalse(true, "$sInstallationXmlPath is not a valid XML content: " . $e->getMessage()); + } + } + + /** + * make sure installation.xml includes all packaged modules + */ + public function testAllModuleAreIncludedInInstallationXml() + { + $sInstallationXmlPath = APPROOT.'datamodels/2.x/installation.xml'; + $this->assertTrue(is_file($sInstallationXmlPath), "$sInstallationXmlPath does not exist"); + + $sInstallationXmlContent = file_get_contents($sInstallationXmlPath); + preg_match_all("|(.*)|", $sInstallationXmlContent, $aMatches); + $aDeclaredModules = [] ; + if (!empty($aMatches)) + { + foreach ($aMatches[1] as $sModule) + { + if (!array_key_exists($sModule, $aDeclaredModules)) + { + $aDeclaredModules[$sModule] = $sModule; + } + } + } + + $this->assertArraySubset($this->GetModulesFromDatamodels(APPROOT.'/datamodels'), $aDeclaredModules, false, "$sInstallationXmlPath does not refer to all provided modules. Refered modules:\n " . var_export($aDeclaredModules, true)); + } + + public function GetModulesFromDatamodels($sFolder) + { + $aModules = array(); + if (is_dir($sFolder)) + { + foreach (glob($sFolder."/*") as $sPath) + { + if (is_dir($sPath)) + { + $aModules = array_merge($aModules, $this->GetModulesFromDatamodels($sPath)); + } + else if (preg_match("/datamodel\..*\.xml/", basename($sPath))) + { + $sModule = basename(dirname($sPath)); + $aModules[$sModule] = $sModule; + } + } + } + return $aModules; + } +} \ No newline at end of file