RequireOnceItopFile('setup/modulediscovery.class.inc.php'); $this->RequireOnceItopFile('setup/module/iTopModulesDependencyValidationService.php'); } protected function tearDown(): void { parent::tearDown(); // TODO: Change the autogenerated stub foreach ($this->aFilesToRemove as $sTmpFile){ @unlink($sTmpFile); } iTopModulesDependencyValidationService::SetInstance(null); } /** * Module dependency validation: make sure dependencies are correct toward classes/interfaces coming from PHP/Xml datamodel files */ public function testReadModuleFileData() { iTopModulesDependencyValidationService::GetInstance()->FetchAllDependenciesViaModulesFiles(); $this->testModulesBasedOnDMFilesOnly(); } /** * Module dependency validation: make sure dependencies are correct toward classes/interfaces coming from Xml datamodel files */ public function testModulesBasedOnDMFilesOnly() { iTopModulesDependencyValidationService::GetInstance()->FetchAllDependenciesViaDM(); $aErrors=[]; /** @var XmlModule $oXmlModule */ foreach (iTopModulesDependencyValidationService::GetInstance()->aModules as $sModuleName => $oXmlModule) { $aCurrentDeps = iTopModulesDependencyValidationService::GetModulesDataByModuleName()[$sModuleName]['dependencies'] ?? []; $aModuleErrors=[]; foreach ($oXmlModule->aDependencyModulesNames as $sDepModuleName => $oXmlModule2){ $sXmlUIDs = implode('|', $oXmlModule->aXMlMetaInfosByModuleNames[$sDepModuleName]); $bResolved=false; foreach ($aCurrentDeps as $sDepString){ $oModuleDependency = new \iTopCoreModuleDependency($sDepString); if (in_array($sDepModuleName, $oModuleDependency->GetPotentialPrerequisiteModuleNames())) { $bResolved=true; break; } foreach ($oModuleDependency->GetPotentialPrerequisiteModuleNames() as $sPotentialDepModuleName){ /** @var XmlModule $oXmlModule2 */ $oXmlModule2 = iTopModulesDependencyValidationService::GetInstance()->aModules[$sPotentialDepModuleName]??null; if (! is_null($oXmlModule2) && $oXmlModule2->Depends($sDepModuleName)){ $bResolved=true; break; } } if ($bResolved) { break; } } if (! $bResolved){ $aModuleErrors []= "$sModuleName depends on $sDepModuleName but missing in module dependencies: " . implode(' & ', $aCurrentDeps) . ". ($sXmlUIDs)"; } } if (count($aModuleErrors)){ $aErrors[$sModuleName]=$aModuleErrors; } } $this->assertEquals(0, count($aErrors), var_export($aErrors, true)); } }