Example #1
0
 /**
  * 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']));
 }