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