/** * 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 testCheckConflictWhenEnableModuleDifferentVersionWithCurEnabledModules() { $moduleListMock = $this->getMock('Magento\\Framework\\Module\\ModuleList', [], [], '', false); $packageInfoMock = $this->getMock('Magento\\Framework\\Module\\PackageInfo', [], [], '', false); $packageInfoMock->expects($this->any())->method('getConflict')->will($this->returnValueMap([['Vendor_A', []], ['Vendor_B', []], ['Vendor_C', ['Vendor_A' => '>=0.2,<0.3', 'Vendor_B' => '<0.4']]])); $packageInfoMock->expects($this->any())->method('getVersion')->will($this->returnValueMap([['Vendor_A', '0.2'], ['Vendor_B', '0.4']])); $packageInfoFactoryMock = $this->getMock('Magento\\Framework\\Module\\PackageInfoFactory', [], [], '', false); $packageInfoFactoryMock->expects($this->once())->method('create')->will($this->returnValue($packageInfoMock)); $conflictChecker = new ConflictChecker($moduleListMock, $packageInfoFactoryMock); $this->assertEquals(['Vendor_C' => ['Vendor_C conflicts with current Vendor_A version 0.2 (version should not be >=0.2,<0.3)']], $conflictChecker->checkConflictsWhenEnableModules(['Vendor_C'], ['Vendor_A', 'Vendor_B'])); }