/**
  * @param bool $isEnable
  * @param string $expectedMessage
  *
  * @dataProvider executeAllDataProvider
  */
 public function testExecuteAll($isEnable, $expectedMessage)
 {
     $this->fullModuleList->expects($this->once())->method('getNames')->will($this->returnValue(['Magento_Module1', 'Magento_Module2']));
     $this->status->expects($this->once())->method('getModulesToChange')->with($isEnable, ['Magento_Module1', 'Magento_Module2'])->will($this->returnValue(['Magento_Module1']));
     $this->status->expects($this->any())->method('checkConstraints')->will($this->returnValue([]));
     $this->status->expects($this->once())->method('setIsEnabled')->with($isEnable, ['Magento_Module1']);
     $commandTester = $isEnable ? new CommandTester(new ModuleEnableCommand($this->objectManagerProvider)) : new CommandTester(new ModuleDisableCommand($this->objectManagerProvider));
     $input = ['--all' => true];
     $commandTester->execute($input);
     $this->assertStringMatchesFormat($expectedMessage, $commandTester->getDisplay());
 }
 private function setUpPassValidation()
 {
     $this->deploymentConfig->expects($this->once())->method('isAvailable')->willReturn(true);
     $packageMap = [['Magento_A', 'magento/package-a'], ['Magento_B', 'magento/package-b']];
     $this->packageInfo->expects($this->any())->method('getPackageName')->will($this->returnValueMap($packageMap));
     $this->fullModuleList->expects($this->any())->method('has')->willReturn(true);
 }
 /**
  * @return ViewModel
  */
 public function indexAction()
 {
     $sampleDataDeployed = $this->moduleList->has('Magento_SampleData');
     if ($sampleDataDeployed) {
         /** @var \Magento\Framework\Setup\SampleData\State $sampleData */
         $sampleData = $this->objectManagerProvider->get()->get('Magento\\Framework\\Setup\\SampleData\\State');
         $isSampleDataInstalled = $sampleData->isInstalled();
         $isSampleDataErrorInstallation = $sampleData->hasError();
     } else {
         $isSampleDataInstalled = false;
         $isSampleDataErrorInstallation = false;
     }
     $view = new ViewModel(['timezone' => $this->list->getTimezoneList(), 'currency' => $this->list->getCurrencyList(), 'language' => $this->list->getLocaleList(), 'isSampleDataInstalled' => $isSampleDataInstalled, 'isSampleDataErrorInstallation' => $isSampleDataErrorInstallation]);
     $view->setTerminal(true);
     return $view;
 }
 public function testComponentsAction()
 {
     $objectManager = $this->getMock('Magento\\Framework\\ObjectManagerInterface', [], [], '', false);
     $this->objectManagerProvider->expects($this->once())->method('get')->willReturn($objectManager);
     $objectManager->expects($this->any())->method('get')->willReturnMap([['Magento\\Framework\\Module\\PackageInfoFactory', $this->packageInfoFactoryMock], ['Magento\\Framework\\Module\\FullModuleList', $this->fullModuleListMock], ['Magento\\Framework\\Module\\ModuleList', $this->enabledModuleListMock]]);
     $this->packageInfoFactoryMock->expects($this->once())->method('create')->willReturn($this->packageInfo);
     $this->fullModuleListMock->expects($this->once())->method('getNames')->willReturn(['magento/sample-module1']);
     $this->packageInfo->expects($this->once())->method('getModuleName')->willReturn('Sample_Module');
     $this->packageInfo->expects($this->exactly(2))->method('getPackageName')->willReturn($this->componentData['magento/sample-module-one']['name']);
     $this->packageInfo->expects($this->exactly(2))->method('getVersion')->willReturn($this->componentData['magento/sample-module-one']['version']);
     $this->enabledModuleListMock->expects($this->once())->method('has')->willReturn(true);
     $this->composerInformationMock->expects($this->once())->method('getInstalledMagentoPackages')->willReturn($this->componentData);
     $this->composerInformationMock->expects($this->once())->method('isPackageInComposerJson')->willReturn(true);
     $this->packagesAuth->expects($this->once())->method('getAuthJsonData')->willReturn(['username' => 'someusername', 'password' => 'somepassword']);
     $this->packagesData->expects($this->once())->method('syncPackagesData')->willReturn($this->lastSyncData);
     $jsonModel = $this->controller->componentsAction();
     $this->assertInstanceOf('Zend\\View\\Model\\JsonModel', $jsonModel);
     $variables = $jsonModel->getVariables();
     $this->assertArrayHasKey('success', $variables);
     $this->assertTrue($variables['success']);
     $expected = [['name' => 'magento/sample-module-one', 'type' => 'magento2-module', 'version' => '1.0.0', 'update' => false, 'uninstall' => true, 'vendor' => 'magento', 'moduleName' => 'Sample_Module', 'enable' => true, 'disable' => false]];
     $this->assertEquals($expected, $variables['components']);
     $this->assertArrayHasKey('total', $variables);
     $this->assertEquals(1, $variables['total']);
     $this->assertEquals($this->lastSyncData, $variables['lastSyncData']);
 }
 /**
  * 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;
 }
 /**
  * Get Filtered Modules by Options selected
  * @param $moduleList
  * @param $inputEnabled
  * @return array
  */
 protected function getModulesByCriteria($moduleList, $inputEnabled)
 {
     $moduleInfo = array();
     $modules = array_intersect_key($this->fullModuleList->getAll(), $moduleList);
     foreach ($modules as $module) {
         $vendor = current(explode("_", $module['name']));
         $title = $module['name'];
         $version = $module['setup_version'];
         $enabled = $this->moduleManager->isEnabled($title) ? 'Y' : 'N';
         $outputEnabled = $this->moduleManager->isOutputEnabled($title) ? 'Y' : 'N';
         if ($inputEnabled) {
             if ($inputEnabled == strtolower($enabled)) {
                 $moduleInfo[] = array($vendor, $title, $version, $enabled, $outputEnabled);
             }
         } else {
             $moduleInfo[] = array($vendor, $title, $version, $enabled, $outputEnabled);
         }
     }
     return $moduleInfo;
 }
示例#7
0
 /**
  * Validate 'enable/disable' job type payload
  *
  * @param array $postPayload
  * @return string
  */
 private function validateEnableDisablePayload(array $postPayload)
 {
     $errorMessage = '';
     $packages = $postPayload[self::KEY_POST_PACKAGES];
     foreach ($packages as $package) {
         if (!$this->moduleList->has($package[self::KEY_POST_PACKAGE_NAME])) {
             $errorMessage .= 'Invalid Magento module name: ' . $package[self::KEY_POST_PACKAGE_NAME] . PHP_EOL;
             break;
         }
     }
     return $errorMessage;
 }
示例#8
0
 /**
  * Get full list of modules as an associative array
  *
  * @return array
  */
 private function getAllModules()
 {
     $modules = [];
     $allModules = $this->fullModuleList->getNames();
     foreach ($allModules as $module) {
         $moduleName = $this->packageInfo->getPackageName($module);
         $modules[$moduleName]['name'] = $moduleName;
         $modules[$moduleName]['type'] = \Magento\Framework\Composer\ComposerInformation::MODULE_PACKAGE_TYPE;
         $modules[$moduleName]['version'] = $this->packageInfo->getVersion($module);
     }
     return $modules;
 }
 public function testUpdateActionSuccessDisable()
 {
     $content = '{"packages":[{"name":"vendor\\/package"}],"type":"disable",' . '"headerTitle": "Disable Package 1" }';
     $this->request->expects($this->any())->method('getContent')->willReturn($content);
     $this->fullModuleList->expects($this->once())->method('has')->willReturn(true);
     $write = $this->getMockForAbstractClass('Magento\\Framework\\Filesystem\\Directory\\WriteInterface', [], '', false);
     $this->filesystem->expects($this->once())->method('getDirectoryWrite')->willReturn($write);
     $write->expects($this->once())->method('writeFile')->with('.type.json', '{"type":"disable","headerTitle":"Disable Package 1","titles":["D"]}');
     $this->controller->setEvent($this->mvcEvent);
     $this->controller->dispatch($this->request, $this->response);
     $this->controller->updateAction();
 }
 /**
  * Auto discover ConfigOptionsList class and collect them.
  * These classes should reside in <module>/Setup directories.
  *
  * @return \Magento\Framework\Setup\ConfigOptionsListInterface[]
  */
 public function collectOptionsLists()
 {
     $optionsList = [];
     // go through modules
     foreach ($this->fullModuleList->getNames() as $moduleName) {
         $optionsClassName = str_replace('_', '\\', $moduleName) . '\\Setup\\ConfigOptionsList';
         if (class_exists($optionsClassName)) {
             $optionsClass = $this->objectManagerProvider->get()->create($optionsClassName);
             if ($optionsClass instanceof ConfigOptionsListInterface) {
                 $optionsList[$moduleName] = $optionsClass;
             }
         }
     }
     // check Setup
     $setupOptionsClassName = 'Magento\\Setup\\Model\\ConfigOptionsList';
     if (class_exists($setupOptionsClassName)) {
         $setupOptionsClass = $this->serviceLocator->get($setupOptionsClassName);
         if ($setupOptionsClass instanceof ConfigOptionsListInterface) {
             $optionsList['setup'] = $setupOptionsClass;
         }
     }
     return $optionsList;
 }
 /**
  * @param array $expected
  * @param $withSampleData
  *
  * @dataProvider indexActionDataProvider
  */
 public function testIndexAction($expected, $withSampleData)
 {
     if ($withSampleData) {
         $this->moduleList->expects($this->once())->method('has')->willReturn(true);
         $this->objectManager->expects($this->once())->method('get')->willReturn($this->sampleDataState);
         $this->sampleDataState->expects($this->once())->method('isInstalled')->willReturn($expected['isSampleDataInstalled']);
         $this->sampleDataState->expects($this->once())->method('hasError')->willReturn($expected['isSampleDataErrorInstallation']);
     } else {
         $this->moduleList->expects($this->once())->method('has')->willReturn(false);
         $this->objectManager->expects($this->never())->method('get');
     }
     $this->lists->expects($this->once())->method('getTimezoneList')->willReturn($expected['timezone']);
     $this->lists->expects($this->once())->method('getCurrencyList')->willReturn($expected['currency']);
     $this->lists->expects($this->once())->method('getLocaleList')->willReturn($expected['language']);
     $viewModel = $this->controller->indexAction();
     $this->assertInstanceOf('Zend\\View\\Model\\ViewModel', $viewModel);
     $this->assertTrue($viewModel->terminate());
     $variables = $viewModel->getVariables();
     $this->assertArrayHasKey('timezone', $variables);
     $this->assertArrayHasKey('currency', $variables);
     $this->assertArrayHasKey('language', $variables);
     $this->assertSame($expected, $variables);
 }
示例#12
0
 /**
  * Validate 'enable/disable' job type payload
  *
  * @param array $postPayload
  * @return string
  */
 private function validateEnableDisablePayload(array $postPayload)
 {
     $errorMessage = '';
     if (!isset($postPayload[UpdaterTaskCreator::KEY_POST_PACKAGES])) {
         $errorMessage = 'Missing packages' . PHP_EOL;
     } else {
         $packages = $postPayload[UpdaterTaskCreator::KEY_POST_PACKAGES];
         foreach ($packages as $package) {
             if (!$this->moduleList->has($package[UpdaterTaskCreator::KEY_POST_PACKAGE_NAME])) {
                 $errorMessage .= 'Invalid Magento module name: ' . $package[UpdaterTaskCreator::KEY_POST_PACKAGE_NAME] . PHP_EOL;
                 break;
             }
         }
     }
     return $errorMessage;
 }
示例#13
0
 public function testComponentsAction()
 {
     $this->fullModuleListMock->expects($this->once())
         ->method('getNames')
         ->willReturn(['magento/sample-module1']);
     $this->packageInfo->expects($this->once())
         ->method('getModuleName')
         ->willReturn('Sample_Module');
     $this->packageInfo->expects($this->exactly(2))
         ->method('getPackageName')
         ->willReturn($this->componentData['magento/sample-module-one']['name']);
     $this->packageInfo->expects($this->exactly(2))
         ->method('getVersion')
         ->willReturn($this->componentData['magento/sample-module-one']['version']);
     $this->enabledModuleListMock->expects($this->once())
         ->method('has')
         ->willReturn(true);
     $this->composerInformationMock->expects($this->once())
         ->method('getInstalledMagentoPackages')
         ->willReturn($this->componentData);
     $this->composerInformationMock->expects($this->once())
         ->method('isPackageInComposerJson')
         ->willReturn(true);
     $this->updatePackagesCacheMock->expects($this->once())
         ->method('getPackagesForUpdate')
         ->willReturn($this->lastSyncData);
     $jsonModel = $this->controller->componentsAction();
     $this->assertInstanceOf('Zend\View\Model\JsonModel', $jsonModel);
     $variables = $jsonModel->getVariables();
     $this->assertArrayHasKey('success', $variables);
     $this->assertTrue($variables['success']);
     $expected = [[
         'name' => 'magento/sample-module-one',
         'type' => 'magento2-module',
         'version' => '1.0.0',
         'update' => false,
         'uninstall' => true,
         'vendor' => 'magento',
         'moduleName' => 'Sample_Module',
         'enable' => true,
         'disable' => false
     ]];
     $this->assertEquals($expected, $variables['components']);
     $this->assertArrayHasKey('total', $variables);
     $this->assertEquals(1, $variables['total']);
     $this->assertEquals($this->lastSyncData, $variables['lastSyncData']);
 }
 /**
  * @param bool $isEnable
  * @param string $expectedMessage
  *
  * @dataProvider executeAllDataProvider
  */
 public function testExecuteAll($isEnable, $expectedMessage)
 {
     $setupUpgradeMessage = 'To make sure that the enabled modules are properly registered, run \'setup:upgrade\'.';
     $this->fullModuleListMock->expects($this->once())->method('getNames')->will($this->returnValue(['Magento_Module1', 'Magento_Module2']));
     $this->statusMock->expects($this->once())->method('getModulesToChange')->with($isEnable, ['Magento_Module1', 'Magento_Module2'])->will($this->returnValue(['Magento_Module1']));
     $this->statusMock->expects($this->any())->method('checkConstraints')->will($this->returnValue([]));
     $this->statusMock->expects($this->once())->method('setIsEnabled')->with($isEnable, ['Magento_Module1']);
     if ($isEnable) {
         $this->deploymentConfigMock->expects($this->once())->method('isAvailable')->willReturn(['Magento_Module1']);
     } else {
         $this->deploymentConfigMock->expects($this->never())->method('isAvailable');
     }
     $commandTester = $this->getCommandTester($isEnable);
     $input = ['--all' => true];
     $commandTester->execute($input);
     $output = $commandTester->getDisplay();
     $this->assertStringMatchesFormat($expectedMessage, $output);
     if ($isEnable) {
         $this->assertContains($setupUpgradeMessage, $output);
     } else {
         $this->assertNotContains($setupUpgradeMessage, $output);
     }
 }
 /**
  * @param string $type
  * @param int $has
  * @param bool $moduleExists
  * @param string $errorMessage
  * @dataProvider validatePayLoadNegativeCasesDataProvider
  */
 public function testValidatePayLoadNegativeCases($type, $has, $moduleExists, $errorMessage)
 {
     $this->fullModuleList->expects($this->exactly($has))->method('has')->willReturn($moduleExists);
     $this->assertStringStartsWith($errorMessage, $this->model->validatePayload($type));
 }