public function testCheckDependenciesWhenDisableModulesWithCurEnabledModules() { $this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock); $actual = $this->checker->checkDependenciesWhenDisableModules(['B', 'D'], ['C', 'D', 'E']); $expected = ['B' => [], 'D' => []]; $this->assertEquals($expected, $actual); }
/** * Whether it is allowed to enable or disable specified modules * * @param bool $isEnabled * @param string[] $modulesToBeChanged * @param string[] $currentlyEnabledModules * @param bool $prettyMessage * * @return string[] */ public function checkConstraints($isEnabled, $modulesToBeChanged, $currentlyEnabledModules = null, $prettyMessage = false) { $errorMessages = []; if ($isEnabled) { $errorModulesDependency = $this->dependencyChecker->checkDependenciesWhenEnableModules($modulesToBeChanged, $currentlyEnabledModules); $errorModulesConflict = $this->conflictChecker->checkConflictsWhenEnableModules($modulesToBeChanged, $currentlyEnabledModules); } else { $errorModulesDependency = $this->dependencyChecker->checkDependenciesWhenDisableModules($modulesToBeChanged, $currentlyEnabledModules); $errorModulesConflict = []; } foreach ($errorModulesDependency as $moduleName => $missingDependencies) { if (!empty($missingDependencies)) { if ($prettyMessage) { $errorMessages[] = $this->createShortErrorMessage($isEnabled, $moduleName); } else { $errorMessages = array_merge($errorMessages, $this->createVerboseErrorMessage($isEnabled, $moduleName, $missingDependencies)); } } } foreach ($errorModulesConflict as $moduleName => $conflictingModules) { if (!empty($conflictingModules)) { $errorMessages[] = "Cannot enable {$moduleName} because it conflicts with other modules:"; $errorMessages[] = implode("\n", $conflictingModules); } } return $errorMessages; }
public function testCheckDependenciesWhenDisableModulesWithCurEnabledModules() { $this->packageInfoMock->expects($this->atLeastOnce())->method('getNonExistingDependencies')->willReturn([]); $this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock); $actual = $this->checker->checkDependenciesWhenDisableModules(['B', 'D'], ['C', 'D', 'E']); $expected = ['B' => [], 'D' => []]; $this->assertEquals($expected, $actual); }
/** * Check for dependencies to modules, return error messages * * @param string[] $modules * @return string[] */ private function checkDependencies(array $modules) { $messages = []; $dependencies = $this->dependencyChecker->checkDependenciesWhenDisableModules($modules, $this->fullModuleList->getNames()); foreach ($dependencies as $module => $dependingModules) { if (!empty($dependingModules)) { $messages[] = "<error>Cannot uninstall module '{$module}' because the following module(s) depend on it:</error>" . PHP_EOL . "\t<error>" . implode('</error>' . PHP_EOL . "\t<error>", array_keys($dependingModules)) . "</error>"; } } return $messages; }
/** * Returns list of modules that can be disabled * * @return array */ private function getListOfDisableModules() { $canBeDisabled = []; $enabledModules = $this->getListOfEnabledModules(); foreach ($this->allModules as $module) { $errorMessages = $this->dependencyChecker->checkDependenciesWhenDisableModules([$module['name']], $enabledModules); if (sizeof($errorMessages[$module['name']]) === 0) { $canBeDisabled[] = $module['name']; } } return $canBeDisabled; }