public function testCheckDependenciesWhenEnableModulesWithCurEnabledModules() { $this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock); $actual = $this->checker->checkDependenciesWhenEnableModules(['B', 'D'], ['C']); $expected = ['B' => ['A' => ['B', 'D', 'A'], 'E' => ['B', 'E']], 'D' => ['A' => ['D', 'A'], 'E' => ['D', 'A', 'B', 'E']]]; $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 testCheckDependenciesWhenEnableModulesWithCurEnabledModules() { $this->packageInfoMock->expects($this->atLeastOnce())->method('getNonExistingDependencies')->willReturn([]); $this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock); $actual = $this->checker->checkDependenciesWhenEnableModules(['B', 'D'], ['C']); $expected = ['B' => ['A' => ['B', 'D', 'A'], 'E' => ['B', 'E']], 'D' => ['A' => ['D', 'A'], 'E' => ['D', 'A', 'B', 'E']]]; $this->assertEquals($expected, $actual); }
private function setUpExecute() { $this->setUpPassValidation(); $this->dependencyChecker->expects($this->once())->method('checkDependenciesWhenDisableModules')->willReturn(['Magento_A' => [], 'Magento_B' => []]); $this->cache->expects($this->once())->method('clean'); $this->cleanupFiles->expects($this->once())->method('clearCodeGeneratedClasses'); }
private function setUpExecute($input) { $this->setUpPassValidation(); $this->remove->expects($this->once())->method('remove')->with(['magento/package-a', 'magento/package-b']); $this->dependencyChecker->expects($this->once()) ->method('checkDependenciesWhenDisableModules') ->willReturn(['Magento_A' => [], 'Magento_B' => []]); $this->dataSetup->expects($this->exactly(count($input['module'])))->method('deleteTableRow'); $this->deploymentConfig->expects($this->once()) ->method('getConfigData') ->with(ConfigOptionsListConstants::KEY_MODULES) ->willReturn(['Magento_A' => 1, 'Magento_B' => 1, 'Magento_C' => 0, 'Magento_D' => 1]); $this->loader->expects($this->once()) ->method('load') ->with($input['module']) ->willReturn(['Magento_C' => [], 'Magento_D' => []]); $this->writer->expects($this->once()) ->method('saveConfig') ->with( [ ConfigFilePool::APP_CONFIG => [ConfigOptionsListConstants::KEY_MODULES => ['Magento_C' => 0, 'Magento_D' => 1]] ] ); $this->cache->expects($this->once())->method('clean'); $this->cleanupFiles->expects($this->once())->method('clearCodeGeneratedClasses'); }
/** * 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; }
/** * @param array $expectedAllModules * @param array $expectedConfig * @param array $expectedResult * * @dataProvider getAllModulesDataProvider */ public function testSetIsEnabled($expectedAllModules, $expectedConfig, $expectedResult) { $this->moduleLoader->expects($this->once())->method('load')->will($this->returnValue($expectedAllModules)); $this->deploymentConfig->expects($this->once())->method('get')->will($this->returnValue($expectedConfig)); $this->dependencyChecker->expects($this->any())->method('checkDependenciesWhenDisableModules')->willReturn(['module1' => [], 'module2' => [], 'module3' => [], 'module4' => []]); $moduleStatus = new ModuleStatus($this->moduleLoader, $this->deploymentConfig, $this->objectManagerProvider); $moduleStatus->setIsEnabled(false, 'module1'); $allModules = $moduleStatus->getAllModules(); $this->assertSame(false, $allModules['module1']['selected']); $this->assertSame($expectedResult[1], $allModules['module2']['selected']); $this->assertSame($expectedResult[2], $allModules['module3']['selected']); $this->assertSame($expectedResult[3], $allModules['module4']['selected']); }